产生的原因-字符串的不变性
int num = 6;
num = 7;
String str = "aaa";
str = "bbb";
由于 String 是引用数据类型,当我们将 str 从 aaa 改为 bbb 的时候,是重新分配了一块空间,之前的 aaa 还是保留。
那么就会产生一个问题:
String str = "";
for (int i = 0; i < str.length; i++) {
str += "hello";
}
这里我们得到的字符串是 10 个 hello 的拼接,但是我们每一次对 str 的改动都会在堆中分配很多没有必要的内存空间,这样就不太科学了,所以才有了 StringBuffer
用法
https://www.runoob.com/java/java-stringbuffer.html
区别
StringBuffer
- 线程安全(多个人对字符串修改,不会出现问题)
- 效率低
StringBuilder
- 线程不安全(多个人对字符串修改,可能会出现问题)
- 效率高