慕粉0958453215
2016-12-12 12:46
在这一节的参考代码里,为什么s4!=s3?创建s3,s4的时候又没有加new,所以应该内存空间应该相同啊
加双引号的为常量,s1 为变量,变量加常量所以是新的内存空间,常量相加直接调用。
Java虚拟机对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即I Love +s1中的s1无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给s3和s4。所以上面程序的结果也就为s3中储存一个新地址,s4中储存另一个新地址。另外,string类型比较特殊,首先它会在常量池中寻找有没有这个值,也就是I Love imooc,如果有,则仅仅在堆内存中创建一个对象否则会创建两个对象,首先在常量池中一个,然后拷贝一个在堆内存,当然栈内存中的变量引用还是指向堆内存里面的对象。
告诉你把,new是重新开辟内存空间,2个new开辟了2个内存空间,就相当于,前面超市有面卖,后面超市也有面卖。你能说2家超市相等吗
String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同.
Java入门第三季
409792 学习 · 4340 问题
相似问题