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

来源:2-5 认识 Java 中的 StringBuilder 类

CyberLiu

2015-09-17 13:44

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

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

写回答 关注

1回答

  • _潇潇暮雨
    2015-09-17 19:20:56
    已采纳

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

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

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

    CyberL...

    非常感谢!

    2015-09-17 20:18:20

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题