为什么s3!=s4?

来源:2-2 Java 中字符串的不变性

慕粉0958453215

2016-12-12 12:46

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

写回答 关注

4回答

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

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

    铺平失望的灰... 回复慕粉0958...

    嗯 是的

    2016-12-23 20:01:57

    共 2 条回复 >

  • 律生息
    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 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同.

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题