问答详情
源自:2-2 Java 中字符串的不变性

为什么s3!=s4?

在这一节的参考代码里,为什么s4!=s3?创建s3,s4的时候又没有加new,所以应该内存空间应该相同啊

提问者:慕粉0958453215 2016-12-12 12:46

个回答

  • 铺平失望的灰烬
    2016-12-14 00:35:47
    已采纳

    加双引号的为常量,s1  为变量,变量加常量所以是新的内存空间,常量相加直接调用。

  • 律生息
    2017-01-24 01:23:30

    Java虚拟机对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即I Love +s1中的s1无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给s3和s4。所以上面程序的结果也就为s3中储存一个新地址,s4中储存另一个新地址。另外,string类型比较特殊,首先它会在常量池中寻找有没有这个值,也就是I Love imooc,如果有,则仅仅在堆内存中创建一个对象否则会创建两个对象,首先在常量池中一个,然后拷贝一个在堆内存,当然栈内存中的变量引用还是指向堆内存里面的对象。

  • 唯灬独
    2017-01-09 15:03:38

    告诉你把,new是重新开辟内存空间,2个new开辟了2个内存空间,就相当于,前面超市有面卖,后面超市也有面卖。你能说2家超市相等吗

  • 快速掉毛兽
    2016-12-12 13:23:07

    String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同.