我们知道在/是可变String
的地方是不可变的。但有时我们会感到困惑在我们的代码中使用什么...... String或StringBuffer/StringBuilder ?? 实际上,在我们使用的最大代码/快速代码中,我们比/更喜欢。StringBuffer
StringBuilder
String
StringBuffer
StringBuilder
这个问题是为了解决困惑,如果您对此有任何想法和正当理由,请回复。
我们知道在/是可变String
的地方是不可变的。但有时我们会感到困惑在我们的代码中使用什么...... String或StringBuffer/StringBuilder ?? 实际上,在我们使用的最大代码/快速代码中,我们比/更喜欢。StringBuffer
StringBuilder
String
StringBuffer
StringBuilder
这个问题是为了解决困惑,如果您对此有任何想法和正当理由,请回复。
以下是这三个最常用的类之间的主要区别。
在String、StringBuffer和StringBuilder中选择的标准
主要思想是 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。
StringBuffers 是线程安全的,这意味着它们具有控制访问的同步方法,因此一次只有一个线程可以访问 StringBuffer 对象的同步代码。因此,在多线程环境中使用 StringBuffer 对象通常是安全的。
StringBuilder 的访问是不同步的,因此它不是线程安全的。通过不同步,StringBuilder 的性能可以优于 StringBuffer。因此,如果您在单线程环境中工作,使用 StringBuilder 而不是 StringBuffer 可能会提高性能。