为了账号安全,请及时绑定邮箱和手机立即绑定

StringBuilder是在原有的地址里去改变原来的字符串吗?

解析里面说StringBuilder 不会额外创建一个对象,比如我先StringBuilder  str1 = new StringBuilder ("JAVA");   再StringBuilder  str2  =new StringBuilder(str1 + 'A');

那么按照解析里说的,不会额外产生临时的变量,那是直接在str1的地址上修改成了JAVAA?  我在eclipse里实验了一下,两个字符串的地址也不一样,也就是说,还是新开辟了一个地址,新产生了一个变量呀。有什么区别

正在回答

1 回答

凡是new出来的都是对象。你new了2次,当然会产生新的对象(开辟新的地址)。我们说字符串具有不变性,指的是字符串一旦声明不可改变(存储在字符串常量池中)。例如:

String str1 = 'abc';
str1 += '123';

实际上以上的代码会在常量池中产生2个字符串:abc和abc123,其中前者因为没有任何指向会在适当的时候被gc回收;而StringBuilder将字符串存放在缓冲区(提到缓冲区我们很自然可以想到可以提高效率)。整个的字符串操作都是在缓冲区中进行,最后调用toString()方法返回字符串(期间并没有产生临时字符串)

1 回复 有任何疑惑可以回复我~
#1

CyberLiu 提问者

非常感谢!
2015-09-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

StringBuilder是在原有的地址里去改变原来的字符串吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信