关于java的StringBuilder小疑问

J2EE 码拜 9年前 (2015-04-10) 899次浏览 0个评论

先说问题,下面的程序运行到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也增加了!”);
}

关于java的StringBuilder小疑问
40分
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对象实例的操作,当然会增加了

关于java的StringBuilder小疑问
引用 1 楼 qingyuan18 的回复:

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对象实例的操作,当然会增加了

正解

关于java的StringBuilder小疑问
 str1=str; 
楼主需要复习面向对象基本知识。
关于java的StringBuilder小疑问
引用 1 楼 qingyuan18 的回复:

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对象实例的操作,当然会增加了

谢谢!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于java的StringBuilder小疑问
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!