解析里面说StringBuilder 不会额外创建一个对象,比如我先StringBuilder str1 = new StringBuilder ("JAVA"); 再StringBuilder str2 =new StringBuilder(str1 + 'A');
那么按照解析里说的,不会额外产生临时的变量,那是直接在str1的地址上修改成了JAVAA? 我在eclipse里实验了一下,两个字符串的地址也不一样,也就是说,还是新开辟了一个地址,新产生了一个变量呀。有什么区别
凡是new出来的都是对象。你new了2次,当然会产生新的对象(开辟新的地址)。我们说字符串具有不变性,指的是字符串一旦声明不可改变(存储在字符串常量池中)。例如:
String str1 = 'abc'; str1 += '123';
实际上以上的代码会在常量池中产生2个字符串:abc和abc123,其中前者因为没有任何指向会在适当的时候被gc回收;而StringBuilder将字符串存放在缓冲区(提到缓冲区我们很自然可以想到可以提高效率)。整个的字符串操作都是在缓冲区中进行,最后调用toString()方法返回字符串(期间并没有产生临时字符串)