锁定老帖子 主题:这个循环太让人郁闷了
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-08
呵呵。碰到大数据,才发现。String和StringBuffer有如此大的性能差距。。
|
|
返回顶楼 | |
发表时间:2009-04-08
晕。
貌似以前做过测试,看了字节码,发现java会自动将string+string优化成stringbuilder的append。 |
|
返回顶楼 | |
发表时间:2009-04-25
sunnycare 写道 晕。
貌似以前做过测试,看了字节码,发现java会自动将string+string优化成stringbuilder的append。 说实话,我也是受这种教育的。 不过经过测试确实如楼主说所,存在巨大差距。我直接将那个倒霉的string+string给当了。 我在编译时没有加参数。 很多人说 写道 Java的编译器在遇到比较长的字符串+操作,内部会自动变成StringBuilder的append操作 |
|
返回顶楼 | |
发表时间:2009-04-25
qianjigui 写道 sunnycare 写道 晕。
貌似以前做过测试,看了字节码,发现java会自动将string+string优化成stringbuilder的append。 说实话,我也是受这种教育的。 不过经过测试确实如楼主说所,存在巨大差距。我直接将那个倒霉的string+string给当了。 我在编译时没有加参数。 很多人说 写道 Java的编译器在遇到比较长的字符串+操作,内部会自动变成StringBuilder的append操作 那是在jvm可感知的范围内..... jvm又不是先知....知道你隔80行后还要去加个字符串 |
|
返回顶楼 | |
发表时间:2009-04-25
抛出异常的爱 写道 那是在jvm可感知的范围内.....
jvm又不是先知....知道你隔80行后还要去加个字符串 JVM确实是不知道。把+换成StringBuilder.append是编译器做的而不是JVM做的。像这个: public class Foo { public static void main(String[] args) { String a = ""; String b = ""; String c = ""; String d = ""; String e = a + b + c; e = e + d; } } 编译出来的.class文件就跟这个基本等价: public class Foo { public static void main(String[] args) { String a = ""; String b = ""; String c = ""; String d = ""; String e = new StringBuilder() .append(a) .append(b) .append(c) .append(d) .toString(); } } 唯一不等价的地方就是.class文件里main方法的LineNumberTable的数据不一样了。 |
|
返回顶楼 | |
发表时间:2009-06-25
当然StringBuffer或StringBuilder是首选哦。 LZ貌似还是初学...... |
|
返回顶楼 | |