这个常量池里面的地址为什么变

在第一张图里面我写了一个输出,此时输出的地址1670675563这个地址应该是我“456”的地址,然后第二张图,我在“123”的下面又加了一个输出上面这个字符串“123”的地址,发现这个1670675563这个地址又变成了“123”的地址,这个是为什么?

img

img

常量池指的并不是你的a变量在常量池里,而是123456这两个字符串在常量池里。a = "123"是把常量池里"123"的引用赋值给了a,把"456"赋值给a当然也会使得a的引用变化。

常量池是在类加载的时候初始化的,你的两次操作进行,类加载了两次,常量池也是初始化了两次

比如,你开了两间房A和B,两间房结构完全一样,但是:
A房间中枕头放在床头,拖鞋放在床尾
B房间中枕头放在床尾,拖鞋放在床头
这是完全合理的

参考

是对应的常量在池中, a是变量, 在方法栈中, 他 指向了常量池的地址, 所以看起来是a变化了