当前位置: 代码迷 >> J2EE >> 关于java的StringBuilder小疑义!求证
  详细解决方案

关于java的StringBuilder小疑义!求证

热度:242   发布时间:2016-04-17 23:41:30.0
关于java的StringBuilder小疑问!求证!
先说问题,下面的程序运行到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对象实例的操作,当然会增加了
  相关解决方案