【发布时间】:2013-03-15 08:18:06
【问题描述】:
所有, 我在写下面的代码时遇到了问题
String hello = "Hello";
String str5 = "Hel" + "lo";
String str8 = "Hel";
String str9 = "lo";
String str10 = str8 + str9;
System.out.println("str10==hello?" + (str10 == hello));
System.out.println("str5==hello?" + (str5 == hello));
System.out.println("str10==str5?" + (str10 == str5));
然后我运行我的代码,控制台打印这个
str10 == hello ? false
str5 == hello ? true
str10 == str5 ? false
这让我很困惑。为什么第二个打印 TRUE 但第一个打印 FALSE?
在我对字符串字面量池的理解中,当定义了一个字符串并且 JVM 将检查该池是否包含该字符串,如果没有,则将该字符串放入池中。
在我的代码中,变量 hello 存在在字符串池中,“Helo”和“lo”也在池中,我的问题是
- 如果池中存在“Helo”和“lo”的串联结果。
- str5和str10s'的定义有什么区别,为什么不是“==”? str5 和 str10 是否引用了字符串池中不同的“Hello”?(“==”似乎表示引用的是同一个对象)
我的jdk版本:1.6.0_29
我的 IDE:Intellij Idea 11.2
谁能指出来?非常感谢
【问题讨论】: