java中,,常量池干嘛的???他和堆内存栈内存有啥联系区别呢

2025-04-15 12:27:56
推荐回答(1个)
回答1:

Java中所有局部变量和对象的引用都是存储在栈内存中的,int a = 1;它是局部变量肯定是在栈内存,但是它与常量池没有关系;
常量池是堆内存中的一部分,专门用来存储字符串常量;所以String a="abc"中,引用a是存储在栈内存的,指向常量池中的"abc";

但是如果是String a = new String("abc");就又不一样了,对于通过构造函数得到的"abc"字符串对象,引用a还是在栈内存,但是"abc"不会存到字符串常量池中,而是在常量池之外的其他堆内存中再生成一个"abc",由于这个对象与原先常量池中的"abc"对象是equal关系,它们之间会建立起一种联系;