我们知道String
在StringBuffer
/ StringBuilder
可变的情况下是不可变的。但有时我们会混淆在代码中使用的内容.. String 或 StringBuffer / StringBuilder ??实际上,在我们的最大代码/快速代码中,我们使用String
而不是StringBuffer
/ StringBuilder
。
这个问题是为了解决困惑,如果你有任何想法和正当理由,请回复。
答案 0 :(得分:28)
以下是这三个最常用类之间的主要区别。
在字符串, StringBuffer 和 StringBuilder
中进行选择的标准答案 1 :(得分:4)
主要思想是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。
答案 2 :(得分:2)
StringBuffers是线程安全的,这意味着它们具有控制访问的同步方法,因此一次只有一个线程可以访问StringBuffer对象的同步代码。因此,StringBuffer对象通常可以安全地在多线程环境中使用。
StringBuilder的访问权限未同步,因此它不是线程安全的。通过不同步,StringBuilder的性能可以比StringBuffer更好。因此,如果您在单线程环境中工作,则使用StringBuilder而不是StringBuffer可能会提高性能。