首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuffer法及附加法

StringBuffer法及附加法
EN

Stack Overflow用户
提问于 2014-12-01 19:26:58
回答 2查看 157关注 0票数 0

以下是否降低了append方法的性能,以及在append中创建了多少字符串对象?

代码语言:javascript
复制
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]创建一个,然后为空间" "创建另一个,将它们组合成最后一个,然后垃圾收集两者?我错了吗?加号在这里是过头了还是我应该使用以下代码:

代码语言:javascript
复制
for (int i = 0; i <= max; i++) {

    result.append(numbers[i]);
    result.append(" ");
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-01 19:33:07

第一个版本实际上将被编译成如下所示:

代码语言:javascript
复制
for (int i = 0; i <= max; i++) {

    result.append( new StringBuilder(numbers[i]).append(" ").toString() );

}

因此,您可以看到,我们正在每次迭代中创建一个全新的StringBuilder,然后丢弃它。

因此,您的第二个版本要好得多,因为它只使用1 StringBuffer。

我还建议您使用StringBuilder而不是StringBuffer,因为StringBuffers同步,而且您似乎只在一个线程中使用它。

票数 4
EN

Stack Overflow用户

发布于 2014-12-01 19:29:12

第一个比较慢。任何时候,当您创建一个新的对象,然后不得不垃圾收集它,它将增加一些开销,减缓您的系统。第二种更快--也许不是很多,但更快--我会自己使用,而不是第一种。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27235703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档