黑马程序员技术交流社区

标题: 学习笔记-String,StringBuilder和StringBuffer之间的差异 [打印本页]

作者: 吴清源    时间: 2013-10-5 14:05
标题: 学习笔记-String,StringBuilder和StringBuffer之间的差异
String,StringBuilder和StringBuffer执行同类操作,运行效果对比
  1. public class TestCharacter {
  2. final static int time = 50000/*100000*/; //循环次数

  3. public TestCharacter(){

  4. }
  5. public void test(String s){
  6. long begin = System.currentTimeMillis();
  7. for(int i=0; i<time; i++){
  8. s += “add”;
  9. }
  10. long over = System.currentTimeMillis();
  11. System.out.println(“操作”+s.getClass().getName()+”类型使用的时间为:”+(over-begin)+”毫秒”);
  12. }
  13. public void test(StringBuffer s){
  14. long begin = System.currentTimeMillis();
  15. for(int i=0; i<time; i++){
  16. s.append(“add”);
  17. }
  18. long over = System.currentTimeMillis();
  19. System.out.println(“操作”+s.getClass().getCanonicalName()+”类型使用的时间为:”+(over-begin)+”毫秒”);
  20. }
  21. public void test(StringBuilder s){
  22. long begin = System.currentTimeMillis();
  23. for(int i=0; i<time; i++){
  24. s.append(“add”);
  25. }
  26. long over = System.currentTimeMillis();
  27. System.out.println(“操作”+s.getClass().getName()+”类型使用的时间为:”+(over-begin)+”毫秒”);
  28. }

  29. /*对 String 直接进行字符串拼接的测试*/
  30. public void test2(){
  31. String s2 = “abcd”;
  32. long begin = System.currentTimeMillis();
  33. for(int i=0; i<time; i++){
  34. String s = s2 + s2 +s2;
  35. }
  36. long over = System.currentTimeMillis();
  37. System.out.println(“操作字符串对象引用相加类型使用的时间为:”+(over-begin)+”毫秒”);
  38. }
  39. public void test3(){
  40. long begin = System.currentTimeMillis();
  41. for(int i=0; i<time; i++){
  42. String s =”abcd” + “abcd” + “abcd”;
  43. }
  44. long over = System.currentTimeMillis();
  45. System.out.println(“操作字符串相加使用的时间为:”+(over-begin)+”毫秒”);
  46. }
  47. public static void main(String[] args){
  48. String s1 = “abcd”;
  49. StringBuffer st1 = new StringBuffer(“abcd”);
  50. StringBuilder st2 = new StringBuilder(“abcd”);
  51. TestCharacter tc = new TestCharacter();
  52. tc.test(s1);
  53. tc.test(st1);
  54. tc.test(st2);
  55. tc.test2();
  56. tc.test3();
  57. }
  58. }
复制代码
循环50000次:
操作java.lang.String类型使用的时间为:7280毫秒
操作java.lang.StringBuffer类型使用的时间为:10毫秒
操作java.lang.StringBuilder类型使用的时间为:0毫秒
操作字符串对象引用相加类型使用的时间为:11毫秒
操作字符串相加使用的时间为:0毫秒

循环100000次:
操作java.lang.String类型使用的时间为:36251毫秒
操作java.lang.StringBuffer类型使用的时间为:10毫秒
操作java.lang.StringBuilder类型使用的时间为:0毫秒
操作字符串对象引用相加类型使用的时间为:21毫秒
操作字符串相加使用的时间为:0毫秒







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2