java. . 关于常量池,引用,堆内存的小疑点。 请教下。ss1=ss1+"def" 这句在内存中做了什么动作
java.. . 关于常量池,引用,堆内存的小问题。 请问下。。ss1=ss1+"def"; 这句在内存中做了什么动作,
//ss1=ss1+"def"; 这句代码。。我很不理解。。刚开始 常量池有个“abc” 栈内存引用是ss1 可是执行到这句话的时候,ss1+“def” 里面的ss1转成对象。。和new String(“def”) 相连接, , 请问下此时的ss1 的栈内存引用是什么 。。 执行完后ss1=“abcdef” 难道ss1 能同时指向堆内存的ss1 对象 和 指向栈内存的“abc”
------解决思路----------------------
ss1相当于一个指针,指向它的物理地址,=号右边代表对它的存储内容做运算,然后将新的内容重新用ss1指向它的物理地址
------解决思路----------------------

ss1一开始指向常量池里的abc
ss1 = ss1 + "def"; 是先运算再赋值
运算是 从ss1指向的对象(地址值0x1234)中取出数据 和 "def"相连 产生一个新值abcdef,在堆中新建一个对象(地址值0x5678)存储这个值,把这个新对象的地址值付给ss1:(地址值0x1234)
package day09;
public class change {
public static void main(String[] args){
String ss1="a"+"bc";
String ss2="abc";
System.out.println(ss1==ss2);//true
ss1=ss1+"def";
ss2="abc"+"def";
System.out.println(ss1==ss2);//false
}
}
//ss1=ss1+"def"; 这句代码。。我很不理解。。刚开始 常量池有个“abc” 栈内存引用是ss1 可是执行到这句话的时候,ss1+“def” 里面的ss1转成对象。。和new String(“def”) 相连接, , 请问下此时的ss1 的栈内存引用是什么 。。 执行完后ss1=“abcdef” 难道ss1 能同时指向堆内存的ss1 对象 和 指向栈内存的“abc”
------解决思路----------------------
ss1相当于一个指针,指向它的物理地址,=号右边代表对它的存储内容做运算,然后将新的内容重新用ss1指向它的物理地址
------解决思路----------------------
ss1一开始指向常量池里的abc
ss1 = ss1 + "def"; 是先运算再赋值
运算是 从ss1指向的对象(地址值0x1234)中取出数据 和 "def"相连 产生一个新值abcdef,在堆中新建一个对象(地址值0x5678)存储这个值,把这个新对象的地址值付给ss1:(地址值0x1234)