我们知道Java程序中的所有字符串文字,例如“abc”,都是作为String类的实例实现的,所有这些都转到String Constant Pool。 我的问题是:“Hello”文字将存储在下面的案例中?
String str=new String("Hello");
如果这个文字将转到“String Constant Pool”,那么intern方法会做什么?
答案 0 :(得分:1)
代码中的字符串文字直接转到Sring池。在它们上调用intern()将不执行任何操作。 intern()仅在您正在构建字符串的情况下才有意义(在运行时,而不是编译时)。在那些情况下,调用intern()将指示JVM将此变量移动到String池中以供将来使用。
答案 1 :(得分:0)
它将存储到Heap中。如果您将使用实习方法,那么它将被推送到字符串池。
public static void main(String[] args) {
String strLiteral="Hello";
String str=new String("Hello");
System.out.println(str==strLiteral);
String str2=new String("Hello").intern();
System.out.println(str2==strLiteral);
}
Output:-
false
true
1)看看上面的代码,我创建了一个String Literal Hello,它存储在String Pool中
2)现在我创建了一个String对象str
,如果我检查引用str和strLiteral它们是不相等的,即它们指向堆中的两个不同对象和String池中的另一个对象。
3)现在我已经创建了一个String对象str2
并在其上调用了一个实习方法,JVM现在将搜索" Hello"在String池中并返回对它的引用。所以现在如果我检查strLiteral和str2是相等的,即指向String池中的同一个对象。
答案 2 :(得分:0)
String str=new String("Hello");
在这种情况下,JVM将在普通(非池)堆内存中创建一个新的字符串对象,文字“Hello”将放在字符串常量池中。变量str将引用堆中的对象(非池)。