以下是否会降低append
方法的性能以及append
中创建的String对象数量?
long[] numbers = new long[20];
StringBuffer result = new StringBuffer(20);
for (int i = 0; i <= max; i++) {
result.append(numbers[i] + " ");
}
System.out.println(result);
我的意思是如果字符串是不可变的,那么append方法应该为numbers[i]
创建一个,然后为空间" "
创建另一个,将它们组合成最后一个并且垃圾收集两个?我错了吗 ?这里的加号是否过度,或者我应该使用以下内容:
for (int i = 0; i <= max; i++) {
result.append(numbers[i]);
result.append(" ");
}
答案 0 :(得分:4)
第一个版本实际上会编译成这样的东西:
for (int i = 0; i <= max; i++) {
result.append( new StringBuilder(numbers[i]).append(" ").toString() );
}
所以你可以看到我们在每次迭代时都会创建一个全新的StringBuilder
然后扔掉它。
所以你的第二个版本要好得多,因为它只会使用1个StringBuffer。
我还建议您使用StringBuilder
代替StringBuffer
,因为StringBuffers
同步,您似乎只在一个帖子中使用它。
答案 1 :(得分:1)
第一个比较慢。每当你创建一个新对象然后不得不进行垃圾收集时,它就会增加一些开销并减慢你的系统速度。第二个更快 - 也许不是很多,但它更快 - 我自己使用它而不是第一个。