大家好,当我写下面的代码时遇到了一个问题:
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
有人可以指出吗?非常感谢