すべて、以下のコードを書くときに問題に直面しました
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
これは私を大いに混乱させました。なぜ 2 番目の出力は TRUE で、最初の出力は FALSE ですか?? 文字列リテラルプールの私の理解では、文字列が定義されている場合、JVMはプールにその文字列が含まれているかどうかを確認し、含まれていない場合は文字列をプールに入れます。
私のコードでは、変数helloが文字列プールに存在し、「Helo」と「lo」もプールに存在します。私の質問は
- 「 Helo」と「lo 」を連結した結果がプールに存在する場合。
- str5 と str10s の定義の違いは何ですか? また、なぜ "==" ではないのですか? str5 と str10 は、文字列プール内の異なる " Hello " を参照していますか? ("==" 参照が同じオブジェクトであることを意味しているようです)
私のjdkバージョン:1.6.0_29
私のIDE:Intellij Idea 11.2
誰でもそれを指摘できますか?どうもありがとうございます