我读到字符串常量池是自引用的同样在this链接中它被写为String literal的创建:
String s= "new";
将创建一个新的String" new"在堆中如果没有一个。 那么它是否意味着始终在堆中创建对象,无论其文字或新对象使用新关键字?
我对实习生的理解是 - 它检查堆中是否有一个具有相同名称的对象然后引用它,否则在堆中创建新对象。 如果我错了,请纠正。
我的另一个疑问是 - 常量池是包含对象还是仅包含对堆中对象的引用。
答案 0 :(得分:3)
是否意味着始终在堆中创建对象,无论其文字或新对象使用新关键字?
是的,在Java中,所有Object
- 派生对象,包括String
,都是在堆中创建的。唯一的区别是来自常量池的相同String
对象在编译器的帮助下被重用,而使用运算符String
创建的new
对象需要来自程序员的显式代码才能获得重复使用。
答案 1 :(得分:0)