A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张森 中级黑马   /  2013-1-2 04:59  /  1302 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先给杨同学说声不好意思,本来已经在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);
复制代码

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 值得鼓励

查看全部评分

1 个回复

倒序浏览
其实自己也有疑问 就是5:18、7:19、8:22、6:15、6:24  如果说是在编译的时候就已经计算好了
那为什么运算结果还是用了几毫秒的时间呢 ? 希望高人指点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马