私は、JavaのクラスString
を理解しようとしていますが、私は以下のような状況を理解することに苦労しています。私はbool = y == x.intern();
を使用する場合は、変数bool
がtrue
に等しくなります使用インターンは
String x = new String("Hey");
String y = "Hey";
:
は、次の例のスニペットを考えてみましょう。
私の質問は:
私はこのような宣言をするとき:
String b = "h";
String a = b.intern + "ey";
boolean x = a == "hey";
x
の値がfalse
だろうが、私が作るときa = (b + "ey").intern();
x
の値はなりますtrue
。第二の例では
なぜだろうではないx = true
?最初の例の宣言が似ていないからですか?はいの場合、違いは何ですか?
次のリンクはあなたに役立ちます:https://weblogs.java.net/blog/2006/06/26/all-about-intern –
'String + String'は新しいStringに評価されます。 *魔法のように拘束されています:同じ内容の既存の拘束されたStringを見つけることを試みません。現在、両方のString式がリテラルの場合、コンパイル時に式全体が*折り返し*される可能性があります。*結果*のみがコンパイルされた出力にあり、標準のインターナショナルルールの影響を受けますが、 '(" h "+" ey ")==" hey "'は真です。折りたたみが削除されると(つまり、変数を使用すると)、これはなくなります。 – user2246674
@TariqAymanあなたの質問を編集して、書式を改善しようとしました。あなたの質問のポイントが失われたと思ったら、それを見直してください。 – acdcjunior