StringBuffer有什么意义,应该更经常使用,StringBuffer还是StringBuilder?

what is the significance of StringBuffer and which should be used more often, StringBuffer or StringBuilder?

为什么java需要StringBuffer?我是 java 的新手,正在研究字符串和字符串方法的操作时,我在 StringBuffer 的部分看到了另一组方法,它们有点相似。我研究过i,但没能对它有一个清晰的认识。

java 中的字符串是不可变的,即如果您对字符串对象执行任何操作,它将为此创建另一个对象,而 StringBuffer 是可变的,因此您可以操作同一个对象而无需将结果存储在另一个对象中。还有 StringBuilder,它与 StringBuffer 的不同之处在于 StringBuffer 是线程安全的,因为它的所有方法都是同步的,以便在多线程环境中使用,这使得它变慢了。

参考:enter link description here

在实践中,每个人都应该始终使用 StringBuilder(永远不要使用 StringBuffer;通常您并不真正需要 StringBuilder,因为编译器会负责添加帮助程序来为您执行此操作)。 StringBuffer 仍然存在的唯一原因是担心将其移除会破坏某处的某些代码。 Java 非常重视向后兼容性

StringBuffer和StringBuilder的区别在于StringBuffer的方法是同步的。这意味着每个尝试调用同步方法的线程都必须获取对象上的锁,这可以防止两个线程调用同一对象上的方法可能导致对象状态损坏的问题。对象中的后备数据存储是一个动态增长的数组,如果两个线程同时处理它并且一个线程从另一个线程中更改它,就会发生不好的事情:抛出异常,或者更糟的是,数据被破坏默默地。

事实证明,现实生活中并不需要连接从多个线程同时接收到的字符串的字符串构建对象,因为没有人希望字符串的构造方式无法预测子字符串的显示顺序in. 当你想构建一个字符串(并确定你确实需要一个构建器)时,构建器很有可能是线程受限的(意味着只有一个线程可以访问构建器),所以不需要同步。