在何处使用 StringBuffer/StringBuilder 比 String

2022-09-03 04:07:38

可能的重复项:
String、StringBuffer 和 StringBuilder

我们知道,在 /是可变的地方,这是不可变的。但有时我们会对代码中使用什么感到困惑。String or StringBuffer/StringBuilder ??实际上,在我们的最大代码/快速代码中,我们比/更喜欢。StringStringBufferStringBuilderStringStringBufferStringBuilder

这个问题是为了解决混乱,如果你有任何想法和适当的理由,那么请给出答复。


答案 1

以下是这三个最常用的类之间的主要区别。

  • String 类对象是不可变的,而 StringBuffer 和 StringBuilder 对象是可变的。
  • StringBuffer 是同步的,而 StringBuilder 是同步的。
  • 串联运算符“+”是使用StringBuffer或StringBuilder在内部实现的。

String、StringBuffer 和 StringBuilder 之间进行选择的条件

  • 如果 Object 值不打算更改,请使用 String 类,因为 String 对象是不可变的。
  • 如果 Object 值可以更改并且只能从单个线程访问,请使用 StringBuilder,因为 StringBuilder 是未同步的。
  • 如果 Object 值可以更改,并且将由多个线程修改,请使用 StringBuffer,因为 StringBuffer 是同步的。

答案 2

主要思想是字符串是不可变的。因此,当您尝试修改它时,将创建新对象。StringBuffer 和 StringBuilder 是可变的。不同之处在于第一个是线程安全的。

使用 StringBuilder 的常用方法是在 NON 线程安全环境中以迭代方式创建 String 对象时解析某些内容。

例如,您有一个数字数组 [1, 2, 3]。要创建对象“String1String2String3”,您可以使用StringBuilder

StringBuilder builder = new StringBuilder();
foreach(Integer num : array) {
    builder.append("String").append(num);
}
builder.toString();

这比只使用.AFAIK,编译器将在循环中使用字符串串联进行优化到StringBuilder,但最好手动使用它。String string = string + ("String" + num);

StringBuffer 在具有由并发线程修改的共享状态时使用。