== を使用して String を比較できますか? はい。常に 100% 動作しますか? いいえ。
Java でプログラミングを始めたときに最初に学んだことの 1 つは、決して == を使用して文字列を比較しないということでしたが、なぜでしょうか? 技術的な説明に行きましょう。
文字列はオブジェクトです。両方の文字列が同じオブジェクトを持つ場合、メソッド equals (Object) は true を返します。== 演算子は、両方の参照 String 参照が同じオブジェクトを指している場合にのみ true を返します。
文字列を作成すると、文字通り文字列のプールが作成されます。JVM 要求が既に文字列プールに同じ値の文字列が存在する場合、同じ値を持つ別の文字列リテラルを作成すると、変数が同じメモリアドレス。
このため、「==」を使用して変数「a」と「b」の等価性をテストすると、true が返される可能性があります。
例:
String a = "abc" / / string pool
String b = "abc"; / * already exists a string with the same content in the pool,
go to the same reference in memory * /
String c = "dda" / / go to a new reference of memory as there is in pool
文字列を作成してメモリ内に新しいオブジェクトを作成し、変数 a と b の等価性を「==」でテストすると、false が返され、メモリ内の同じ場所を指しません。
String d = new String ("abc") / / Create a new object in memory
String a = "abc";
String b = "abc";
String c = "dda";
String d = new String ("abc");
a == b = true
a == c = false
a == d = false
a.equals (d) = true