Javaの文字列について簡単な質問があります。次の単純なコードのセグメントは、2つの文字列を連結し、それらをと比較するだけ==
です。
String str1="str";
String str2="ing";
String concat=str1+str2;
System.out.println(concat=="string");
比較式のconcat=="string"
戻りfalse
明らかなように(私は違いを理解するequals()
とし==
)。
この2つの文字列がfinal
そのように宣言されている場合、
final String str1="str";
final String str2="ing";
String concat=str1+str2;
System.out.println(concat=="string");
concat=="string"
この場合、比較式はを返しますtrue
。なぜfinal
違いがあるのですか?それはインターンプールで何かをしなければならないのですか、それとも私はただ惑わされていますか?
equals()
し、==
文字列のコンテキストで、そしてより意味のある質問をされています。
String
ますか?内容の比較をで行うのはばかげているのではなく、非常に論理的だと思いequals
ます。オーバーライドして、2つのオブジェクトが等しいと見なした場合に通知し、アイデンティティの比較をで行うことができます==
。内容の比較が行われた場合、==
それをオーバーライドして「等しい内容」の意味を定義することはできず、の意味equals
とs ==
についてのみ逆にString
することはばかげたことになります。また、これに関係なく==
、コンテンツの比較を行う代わりに、とにかく何の利点もないと思いますequals
。