java. . 关于常量池,引用,堆内存的小疑点。 请教下。ss1=ss1+"def" 这句在内存中做了什么动作

java.. . 关于常量池,引用,堆内存的小问题。 请问下。。ss1=ss1+"def"; 这句在内存中做了什么动作,

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指向它的物理地址
------解决思路----------------------
java. .  关于常量池,引用,堆内存的小疑点。 请教下。ss1=ss1+"def" 这句在内存中做了什么动作

ss1一开始指向常量池里的abc

ss1 = ss1 + "def";  是先运算再赋值

运算是   从ss1指向的对象(地址值0x1234)中取出数据 和  "def"相连  产生一个新值abcdef,在堆中新建一个对象(地址值0x5678)存储这个值,把这个新对象的地址值付给ss1:(地址值0x1234)