下面的代码证明了method1比method2更快。有人能解释一下这种行为的原因吗?
class Trial {
String _member;
void method1() {
for(int i=0;i<30480;i++) {
_member += "test";
}
}
void method2() {
String temp="";
for(int i=0;i<30480;i++) {
temp += "test";
}
_member = temp;
}
public static void main(String args[]) {
Trial t = new Trial();
long startTime1 = System.currentTimeMillis();
t.method1();
long endTime1 = System.currentTimeMillis();
long startTime2 = System.currentTimeMillis();
t.method2();
long endTime2 = System.currentTimeMillis();
System.out.println(endTime1 - startTime1);
System.out.println(endTime2 - startTime2);
}
}
3条答案
按热度按时间2ic8powd1#
将JVM预热一段时间后,您将看到,method 2比method 1快。
下面是我的重构代码:
结果如下:
但是对于实际的基准测试,你应该运行它几次,观察统计行为,只有这样你才能得出任何结论!
wj8zmpe12#
我已经修改了测试的次数,但是没有修改方法,这里用StringBuilder2500 * 达到3000 的时间更快!
输出:
所以正如@Andreas所说,这不是一个测试性能的好方法。
需要指出的是:使用具有声明大小的StringBuilder(在约书亚Bloch的书Effective Java * 第51项中:请注意字符串连接的性能 *)