StringBuffer和append方法

时间:2014-12-01 19:26:58

标签: java string stringbuffer

以下是否会降低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(" ");
}

2 个答案:

答案 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)

第一个比较慢。每当你创建一个新对象然后不得不进行垃圾收集时,它就会增加一些开销并减慢你的系统速度。第二个更快 - 也许不是很多,但它更快 - 我自己使用它而不是第一个。