黑马程序员技术交流社区

标题: 关于刚刚的帖子遍历 [打印本页]

作者: 张森    时间: 2013-1-2 04:59
标题: 关于刚刚的帖子遍历
首先给杨同学说声不好意思,本来已经在http://bbs.itheima.com/thread-34699-1-1.html你的帖子里回复了,
之所以还要来这里说,是因为看见很多同学都是说的第三种方式(StringBuffer)效率最高,而第一种累加效率最低,因为第一种会生成1001个对象,所以会很慢。
在这来新开个帖子给大家说明下,希望对大家有帮助。
个人见解肯定是第一种效率最高,因为java编译器对字符串常量直接相加的表达式进行优化,在编译的时候就去掉了加号。
经过实验代码看也是第一种效率最高。我们同时累加的100000 的运行结果对比分别是5:18、7:19、8:22、6:15、6:24可以看见差距还是蛮大的。由于代码篇幅太大我就发了一点上来,在做10000累加的时候我用了笨方法,每行20个串相加,然后复制了5000行就是100000个字符串相加。然后再运行结果。
以上是我自己的一点见解,希望对大家有帮助,如果哪里有错,也希望大家多多指点。
  1.   +"1"+"2"+"3333333333333333333333"+"4"+"5"+"6"+"7"+"8333333333333333333"+"9"+"10"+"11"+"1233333333333333333333333333333333"+"13"+"14"+"15"+"16"+"17"+"18"+"19"+"20"
  2.                 +"1"+"2"+"3333333333333333333333"+"4"+"5"+"6"+"7"+"8333333333333333333"+"9"+"10"+"11"+"1233333333333333333333333333333333"+"13"+"14"+"15"+"16"+"17"+"18"+"19"+"20"
  3.                 +"1"+"2"+"3333333333333333333333"+"4"+"5"+"6"+"7"+"8333333333333333333"+"9"+"10"+"11"+"1233333333333333333333333333333333"+"13"+"14"+"15"+"16"+"17"+"18"+"19"+"20"
  4.                 +"1"+"2"+"3333333333333333333333"+"4"+"5"+"6"+"7"+"8333333333333333333"+"9"+"10"+"11"+"1233333333333333333333333333333333"+"13"+"14"+"15"+"16"+"17"+"18"+"19"+"20"               
  5.                 ;
  6.                 System.out.println(System.currentTimeMillis()-start);
  7.                
  8.                 StringBuffer sb = new StringBuffer();
  9.                 Long s1 = System.currentTimeMillis();
  10.                 for(int i=0;i<100000;i++){
  11.                         sb.append(i);
  12.                 }
  13.                 System.out.println(System.currentTimeMillis()-s1);
复制代码

作者: 张森    时间: 2013-1-2 05:00
其实自己也有疑问 就是5:18、7:19、8:22、6:15、6:24  如果说是在编译的时候就已经计算好了
那为什么运算结果还是用了几毫秒的时间呢 ? 希望高人指点。




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