我读到字符串常量池是自引用的也在 this 中链接它被写成字符串文字的创建:
String s= "new";
如果没有,将在堆中创建一个新的字符串“new”。 那么是否意味着对象总是在堆中创建,无论其字面量还是使用 new 关键字的新对象?
我对 intern 的理解是——它检查堆中是否有同名对象,然后引用它,否则在堆中创建新对象。 如果我在这里错了,请更正。
我的另一个疑问是 - 常量池是否包含对象或仅包含对堆中对象的引用。
最佳答案
does it mean that object is always created in the heap regardless its literal or new object using new keyword?
是的,在 Java 中,所有 Object
派生的对象,包括 String
,都是在堆中创建的。唯一的区别是常量池中相同的 String
对象在编译器的帮助下得到重用,而使用运算符 new
创建的 String
对象需要程序员的显式代码,以便重用。
关于java - String常量池的自引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050385/