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