所有,
我在编写下面的代码时遇到了问题
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?
在我理解String文字池时,当一个字符串被定义并且JVM将检查池是否包含该字符串时,如果没有,则将该字符串放入pool.in我的代码中,变量hello存在于字符串池中,“Helo”和“lo” “也在游泳池里,我的问题是
>如果池中存在“Helo”和“lo”串联的结果.
>关于str5和str10s的定义有什么区别,为什么它们不是“==”? str5和str10是否指向字符串池中的不同“Hello”?(“==”似乎表示引用是同一个对象)
我的jdk版本:1.6.0_29
我的IDE:Intellij Idea 11.2
有人可以指出来吗?非常感谢你