2016-10-26 5 views
0

String LiteralsCommon Poolにあり、同じテキストを持つ2つの文字列リテラルが共通プール内の同じ場所を参照することがわかりました。コードの下に取る:`str1 == str2`を論理エラーにする特殊なケースは何ですか?

String str1 = "Amir"; 
String str2 = "Amir"; 

今両方str1str2共通プール内の同じ場所を参照してください。だから我々が知っていることから、これらの2つの文字列を正しく比較するためにequals()を使う必要があります。そして明らかにstr1.equals(str2)trueになります。

今から私がhereを読んだのはstr1 == str2は、両方とも同じアドレス(音がかなり論理的です)を持っているから真実になると言いますが、そうする論理的な誤りもあります。

私の質問は、str1 == str2を使用すると問題と不一致が発生する可能性があります。

答えて

1

ない特別例、共通例:

String base = "Amir123"; 
String str1 = base.substring(0, 4); 
String str2 = "Amir"; 
System.out.println(str1.equals(str2)); // true 
System.out.println(str1 == str2);  // false 

Live Copy

String str1 = "Amir"; 
String am = "Am"; 
String ir = "ir"; 
String str2 = am + ir; 
System.out.println(str1.equals(str2)); // true 
System.out.println(str1 == str2);  // false 

Live Copy(ありがとうJLRishe)基本的には

、ジュースt約任意時間は、コンパイル時に完全に形成されるのではなく、実行時に文字列が作成されます。デフォルトでは、新しいStringオブジェクトになります。Stringオブジェクトは==になりません。

+1

また、http://ideone.com/NTGlRC – JLRishe

+0

はい。この場合でも:http://ideone.com/jU4GAA –

関連する問題