Java String vs StringBuilder

时间:2016-02-25 10:18:49

标签: java string performance concatenation

据我所知,Java String中的+ operator被重载,当我们使用+运算符时,它会自动选择StringBuffer或StringBuilder来连接具有更好性能的字符串。唯一的例外是我们在循环中使用+运算符。在这种情况下,Java不使用StringBuffer和StringBuilder的好处。真的吗?我将连接40个字符串(大约4500个字符),我会经常重复它,所以我想确定它。

2 个答案:

答案 0 :(得分:7)

不,Java将始终(几乎总是,请参阅下面的评论)将连接转换为StringBuilder。然而,循环的问题是它将在每次演练中创建StringBuilder的新实例。

因此,如果您在从String someString = i + "something";0的循环内1000,它将为您创建StringBuilder的新实例1000次。那可能是一个性能问题。所以只需在循环之前声明StringBuilder,然后在其中使用它。

答案 1 :(得分:1)

  • 字符串不可变,而StringBuilder 可变,这意味着当您创建字符串时,您永远无法更改它

  • String是线程安全的,而StringBuilder不是

  • 字符串存储在常量字符串池中而字符串中的StringBuilder

循环时

oldString = oldString + somechars,

这意味着你创建一个新的String并首先将oldString的值放入其中,然后追加somechars,然后将oldString变量重定向到结果