为了账号安全,请及时绑定邮箱和手机立即绑定

为什么s3!=s4?

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

正在回答

4 回答

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

4 回复 有任何疑惑可以回复我~
#1

慕粉0958453215 提问者

哦哦,双引号肯定是常量对吧?如果两个常量相加就会结果相等吧?
2016-12-15 回复 有任何疑惑可以回复我~
#2

铺平失望的灰烬 回复 慕粉0958453215 提问者

嗯 是的
2016-12-23 回复 有任何疑惑可以回复我~

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

5 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409789    人
  • 解答问题       4340    个

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

进入课程

为什么s3!=s4?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信