我读到字符串常量池是自引用的,也在this链接中将其写为String文字的创建:
String s= "new";
如果没有,将在堆中创建一个新的字符串“ new”。
那么,这是否意味着对象总是在堆中创建的,而不管它的字面量还是使用new关键字的新对象?
我对intern的了解是-它检查堆中是否有同名对象,然后引用该对象,否则在堆中创建新对象。
如果我在这里错了,请纠正。
我还有另一个疑问-常量池是否包含对象或只是对堆中对象的引用。
最佳答案
这是否意味着始终使用堆中的对象创建堆中的对象,无论其字面量还是新对象?
是的,在Java中,所有Object
派生的对象(包括String
)都在堆中创建。唯一的区别是常量池中相同的String
对象在编译器的帮助下可以重复使用,而用运算符String
创建的new
对象需要程序员提供显式代码才能重新使用。
关于java - 字符串常量池的自引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29050385/