先说问题,下面的程序运行到str1.append("str也增加了!"); 发现str也会添加这个字串:str也增加了!
是因为stringBuilder的共用缓存区的问题吗?
还是引用对象的问题:str和str1指向的地址都是同一个,是同一个对象,根本没有创建,str1增加了,str就也增加了?
StringBuilder str = new StringBuilder();
str.append("hello");
str.append(" world");
StringBuilder str1 = new StringBuilder();
for(int i = 0;i<3;i++){
str1=str;
str1.append("str也增加了!");
}
------解决思路----------------------
StringBuilder 是对象,String是java中的特殊基本类型,每一个String都是内存中的静态字符串变量,这就是要用StringBuffer来做字符串拼接而不要用String的原因,后者会产生很多内存字符串碎片
StringBuilder str1 = new StringBuilder();--你实例化了一个StringBuffer的对象,并用str1引用指向这个对象实例
str1=str---你把str1引用指向之前的str引用,str1原来的StringBuffer对象实例成为孤立对象实例(无引用指针),很快会被GC垃圾回收
str1.append("str也增加了!");--现在str1和str都指向之前的StringBuffer对象实例,对str1和str的操作都是对之前的StringBuffer对象实例的操作,当然会增加了