我读到字符串常量池是自引用的,也在this链接中将其写为String文字的创建:

String s= "new";


如果没有,将在堆中创建一个新的字符串“ new”。
那么,这是否意味着对象总是在堆中创建的,而不管它的字面量还是使用new关键字的新对象?

我对intern的了解是-它检查堆中是否有同名对象,然后引用该对象,否则在堆中创建新对象。
如果我在这里错了,请纠正。

我还有另一个疑问-常量池是否包含对象或只是对堆中对象的引用。

最佳答案

这是否意味着始终使用堆中的对象创建堆中的对象,无论其字面量还是新对象?


是的,在Java中,所有Object派生的对象(包括String)都在堆中创建。唯一的区别是常量池中相同的String对象在编译器的帮助下可以重复使用,而用运算符String创建的new对象需要程序员提供显式代码才能重新使用。

关于java - 字符串常量池的自引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29050385/

10-10 01:52