以下是否降低了append方法的性能,以及在append中创建了多少字符串对象?
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);我的意思是,如果字符串是不可变的,那么追加方法应该为numbers[i]创建一个,然后为空间" "创建另一个,将它们组合成最后一个,然后垃圾收集两者?我错了吗?加号在这里是过头了还是我应该使用以下代码:
for (int i = 0; i <= max; i++) {
result.append(numbers[i]);
result.append(" ");
}发布于 2014-12-01 19:33:07
第一个版本实际上将被编译成如下所示:
for (int i = 0; i <= max; i++) {
result.append( new StringBuilder(numbers[i]).append(" ").toString() );
}因此,您可以看到,我们正在每次迭代中创建一个全新的StringBuilder,然后丢弃它。
因此,您的第二个版本要好得多,因为它只使用1 StringBuffer。
我还建议您使用StringBuilder而不是StringBuffer,因为StringBuffers同步,而且您似乎只在一个线程中使用它。
发布于 2014-12-01 19:29:12
第一个比较慢。任何时候,当您创建一个新的对象,然后不得不垃圾收集它,它将增加一些开销,减缓您的系统。第二种更快--也许不是很多,但更快--我会自己使用,而不是第一种。
https://stackoverflow.com/questions/27235703
复制相似问题