字符串常量池
由于这些问题#1说明:问题1和问题2我的理解是“ 字符串常量 ”被拘留时:
String s = "abc";
在以下情况下,JVM将创建一个新的String对象,而不是使用String Pool中的现有对象:
String s = new String("abc");
但是,在阅读以下两个类似的陈述后,我有一个疑问。
来自SCJP准备书:
当编译器遇到String文本时,它会检查池以查看是否已存在相同的String。如果找到匹配项,则对新文本的引用将定向到现有String,并且不会创建新的String文本对象。
在这种情况下,由于关键字“new”,我们实际上最终会遇到略微不同的行为。在这种情况下,对字符串文字的引用仍然放在常量表(String Literal Pool)中,但是,当你来到关键字“new”时,JVM必须在运行时创建一个新的String对象,而不是使用常量表中的那个。
因此,当我们使用“new”并基于上面的定义创建对象时,我们还在非池内存和池内存中放置引用。当我们这样做时,JVM是否也应该返回相同的引用?:
String one = new String("test");String two = "test";System.out.println(one.equals(two)); // trueSystem.out.println(one == two); // false
因为在声明字符串文字时String three = "test";
它会存在于池中吗?因此应该返回相同的参考和打印真实?或者之前的陈述是否意味着它们将被放入池内存中,但只是在使用new
运算符时跳过?
HUX布斯
牧羊人nacy
Qyouu
相关分类