gpt4 book ai didi

java - 字符串是不可变的——这意味着我不应该使用 += 而只使用 StringBuffer?

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:50 25 4
gpt4 key购买 nike

字符串是不可变的,这意味着它们一旦创建就无法更改。

那么,这是否意味着如果使用 += 追加内容比创建 StringBuffer 并向其追加文本会占用更多内存?

如果你使用 +=,你会在每次必须保存在内存中的时候创建一个新的“对象”,不是吗?

最佳答案

是的,每次使用 += 都会创建一个新对象。然而,这并不意味着这样做总是错误的。这取决于您是希望该值作为字符串,还是只是使用它来进一步构建字符串。

如果您确实想要 x + y 的结果作为字符串,那么您最好使用字符串连接。但是,如果您真的要(比如说)循环并附加另一个字符串,以及另一个字符串等等 - 只需要在最后作为字符串的结果,那么 StringBuffer/StringBuilder 就是可行的方法。确实,循环确实是 StringBuilder 优于字符串连接的地方 - 5 个甚至 10 个直接连接的性能差异将非常小,但对于数千个它会变得更糟 - 基本上是因为你得到 O(N2 ) 串联的复杂性与 StringBuilder 的 O(N) 复杂性。

在 Java 5 及更高版本中,您基本上应该使用 StringBuilder - 它是非同步的,但几乎总是可以的;很少有人想在线程之间共享一个。

我有一个 article on all of this您可能会觉得有用。

关于java - 字符串是不可变的——这意味着我不应该使用 += 而只使用 StringBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com