だから私は読んだこと、あなたが書く場合は、この:比較文字列が
String a="foo";
String b="foo";
System.out.println(a==b);
最初の実装は、「探しているメモリプールをチェックするので、それは、「真」に印刷されます
foo "を見つけたら、新しいオブジェクトを作成してfooをメモリプールに入れて、他のすべての文字列が同じオブジェクトを指し示すようにします。
、あなたが書いた場合:あなたは、Bのための新しいオブジェクトの作成を強制するので、それは文句を言わないプールからそれを取るよう
がString a="foo";
String b=new String("foo");
System.out.println(a==b);
それは、「偽」に印刷されます。あなたがこれを書いた場合
、私の質問は:
String a=new String("foo");
String b="foo";
System.out.println(a==b);
なぜそれはまだ「偽」印刷していますか?私は "a"は新しいオブジェクトを作成し、メモリプールを調べませんが、bはメモリプールを見て、オブジェクト "a"を作成してそれを指すはずです。私はここで何が欠けているのですか? ありがとうございます。
aはmemoryPoolにないため、aとbはdif参照を指しています.... –
'String a = new String(" foo ");' 2つのオブジェクトを作成します。最初に '' foo''を作成し、次に 'new String'を使ってもう一つ作成します。 – marstran
これは簡単です。文字列用のStringプールとオブジェクト用のObjectプールがあります。文字プール内の文字列とオブジェクトプール内のStringオブジェクトを比較することはできません。==直接 – PSo