String 不可变性,为什么没懂哪里证明了不可变

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

花小明

2016-07-22 16:55

String str = "hello";
System.out.println(str + "world");
System.out.println(str);
//也没改变str啊,str不可能变啊,为什么说证明了不可变性呢


写回答 关注

4回答

  • qq_梦中虔诚_03693510
    2016-07-22 17:35:28
    已采纳

    地址相同说明其实只有一个对象,只是变量名不一样,就像一个人的名字父母对你的称呼是小明,别人对你的称呼是真名,但指的都是同一个人

    花小明

    非常感谢!

    2016-07-25 08:56:30

    共 1 条回复 >

  • 慕粉2215004240
    2018-07-28 14:35:14

    package cn.yqg.day3;


    public class Test8 {

       public static void main(String[] args) {

    String str="ss";//内存开辟空间,存储ss,将地址赋值给str。

    System.out.println(str.hashCode());

    str=str+"pp";//新开辟一个内存空间存储str+"pp",并将内存地址赋值给str,那么上面的ss存储地址将没有变量来赋值,变成了垃圾。

    System.out.println(str.hashCode());

    }

    }

    两次输出结果不一样。可以参考https://www.cnblogs.com/zzuli/p/9381266.html

  • qq_梦中虔诚_03693510
    2016-07-22 17:10:38

    String str1 = "hello";
    String str2 = str1;
    System.out.println(str1 == str2);
    str2 = str2 + " world";
    System.out.println(str1);
    System.out.println(str2);
    System.out.println(str1 == str2);

    str1 == str2比较的是内存中的地址,你可以运行一下看结果

    花小明 回复qq_梦中虔...

    我知道String是一个特殊类,那String 创建的str1是对象还是什么,我看2.2节里说的这种创建方法是创建的对象,而str1==str2比较的是引用地址等或不等吧,结果相等,但是两个对象怎么能共用一个地址呢?我感觉我要炸了...

    2016-07-22 17:30:00

    共 2 条回复 >

  • 慕仔4221270
    2016-07-22 17:03:24

    我理解的是这样的。第一行创建了一个字符串str,而第二行将str和world连接之后会分配另外的空间来存储这个新的字符串,所以原来的str在内存中的位置并没有改变。

    共 1 条回复 >

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题