在第一张图里面我写了一个输出,此时输出的地址1670675563这个地址应该是我“456”的地址,然后第二张图,我在“123”的下面又加了一个输出上面这个字符串“123”的地址,发现这个1670675563这个地址又变成了“123”的地址,这个是为什么?
常量池指的并不是你的a
变量在常量池里,而是123
、456
这两个字符串在常量池里。a = "123"
是把常量池里"123"
的引用赋值给了a,把"456"
赋值给a当然也会使得a的引用变化。
常量池是在类加载的时候初始化的,你的两次操作进行,类加载了两次,常量池也是初始化了两次
比如,你开了两间房A和B,两间房结构完全一样,但是:
A房间中枕头放在床头,拖鞋放在床尾
B房间中枕头放在床尾,拖鞋放在床头
这是完全合理的
是对应的常量在池中, a是变量, 在方法栈中, 他 指向了常量池的地址, 所以看起来是a变化了