【问题标题】:Where to use StringBuffer/StringBuilder than String [duplicate]在哪里使用 StringBuffer/StringBuilder 而不是 String [重复]
【发布时间】:2012-07-01 16:41:45
【问题描述】:

可能重复:
String, StringBuffer, and StringBuilder

我们知道String 是不可变的,而StringBuffer/StringBuilder 是可变的。但有时我们会困惑在我们的代码中使用什么...... StringStringBuffer/StringBuilder ?实际上,在我们使用的最大代码/快速代码中,我们更喜欢String 而不是StringBuffer/StringBuilder

这个问题是为了解决困惑,如果您有任何想法和正当理由,请回复。

【问题讨论】:

  • 是的,这个链接很有用。

标签: java android string stringbuilder


【解决方案1】:

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

  • String 类对象是不可变的,而 StringBuffer 和 StringBuilder 对象是可变的。
  • StringBuffer 已同步,而 StringBuilder 未同步。
  • 连接运算符“+”是内部实现的 StringBuffer 或 StringBuilder。

StringStringBufferStringBuilder

中选择的标准
  • 如果对象值不会更改,请使用字符串类,因为 字符串对象是不可变的。
  • 如果 Object 值可以更改并且只能从 单线程,使用 StringBuilder 因为 StringBuilder 是 不同步。
  • 如果Object值可以改变,并且会被多次修改 线程,使用 StringBuffer,因为 StringBuffer 是同步的。

【讨论】:

  • 你的回答很有用,但我们真的遵循这个吗??我认为答案是 NO
【解决方案2】:

StringBuffer 是线程安全的,这意味着它们具有控制访问的同步方法,因此一次只有一个线程可以访问 StringBuffer 对象的同步代码。因此,在多线程环境中使用 StringBuffer 对象通常是安全的。

StringBuilder 的访问是不同步的,因此它不是线程安全的。通过不同步,StringBuilder 的性能可以优于 StringBuffer。因此,如果您在单线程环境中工作,使用 StringBuilder 而不是 StringBuffer 可能会提高性能。

【讨论】:

  • 请注意,两个线程使用相同的 StringBuffer/StringBuilder 是非常非常罕见的。从来没有经历过。
  • 正确 :) 我同意并感谢您指出 :)
【解决方案3】:

主要思想是 String 是不可变的。因此,当您尝试修改它时,会创建新对象。 StringBuffer 和 StringBuilder 是可变的。不同的是第一个是线程安全的。

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

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

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

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

当你有共享状态时使用StringBuffer,由并发线程修改。

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2012-03-18
    • 2016-12-17
    • 2015-12-13
    • 1970-01-01
    • 2014-08-26
    • 2014-10-06
    • 2016-07-13
    • 2014-07-09
    相关资源
    最近更新 更多