String、StringBuffer 和 StringBuilder

2022-08-31 05:55:46

请告诉我一个实时的情况来比较, , 和 ?StringStringBufferStringBuilder


答案 1

可变性差异:

String是不可变的,如果您尝试更改它们的值,则会创建另一个对象,而 并且是可变的,因此它们可以更改其值。StringBufferStringBuilder

螺纹安全区别:

和 之间的区别在于线程安全。因此,当应用程序只需要在单个线程中运行时,最好使用 。 比 更有效。StringBufferStringBuilderStringBufferStringBuilderStringBuilderStringBuffer

情况:

  • 如果字符串不打算更改,请使用 String 类,因为对象是不可变的。String
  • 如果你的字符串可以更改(例如:字符串构造中的大量逻辑和操作),并且只能从单个线程访问,则使用 a 就足够了。StringBuilder
  • 如果您的字符串可以更改,并且将从多个线程访问,请使用 as 是同步的,以便具有线程安全性。StringBufferStringBuffer

答案 2
  • 当不可变结构合适时,您可以使用字符串;从 中获取新的字符序列可能会在 CPU 时间或内存中带来不可接受的性能损失(获取子字符串是 CPU 效率的,因为不会复制数据,但这意味着可能仍然分配了大量数据)。String
  • 当您需要创建可变字符序列(通常用于将多个字符序列连接在一起)时,可以使用 StringBuilder
  • 在使用 相同的情况下使用 StringBuffer,但当必须同步对基础字符串的更改时(因为多个线程正在读取/修改字符串缓冲区)。StringBuilder

请参阅此处的示例。