==とequalsの違いは?
-
==
とequals
の違いは、次のようになります==
演算子は、比較しているオブジェクトの参照が同じかどうかをチェックします。つまり、比較しているオブジェクトが同じオブジェクトであるかどうかをチェックします。 一方、equals
メソッドは、オブジェクトの内容が同じであるかどうかをチェックします。 -
例1
String str1 = "Hello World"; String str2 = "Hello World"; boolean isEqual = str1.equals(str2);//true boolean isSameRef = (str1 == str2);//true
これら 2 つの文字列オブジェクトがメモリ内の定数プールに格納され、実際には同じメモリ アドレスを指します。 これは、Java の文字列は不変オブジェクトであるため、同じ内容の複数の文字列オブジェクトを作成すると、それらはすべて定数プールに格納され、同じメモリ アドレスを指して、メモリ スペースの浪費を回避します。
したがって、"=" 演算子を使用してこれら 2 つの文字列オブジェクトを比較すると、同じメモリ アドレスを指しているため、true が返されます。 equals() メソッドを使用してこれら 2 つの文字列オブジェクトを比較すると、同じ文字列コンテンツが格納されているため、true が返されます。
-
例2
String str1 = new String("Hello"); String str2 = new String("Hello"); boolean isEqualUsingEquals = str1.equals(str2); // true boolean isEqualUsingOperator = (str1 == str2); // false
この例では、str1 と str2 には同じ文字列コンテンツが含まれていますが、異なるメモリ アドレスを指しています。 Java では、new キーワードを使用して作成されたオブジェクトは、毎回メモリ内に新しいインスタンスを作成するためです。
したがって、「=」演算子を使用してこれら 2 つの文字列オブジェクトを比較すると、異なるメモリ アドレスを指しているため、false が返されます。 equals() メソッドを使用してこれら 2 つの文字列オブジェクトを比較すると、同じ文字列コンテンツが含まれているため、true が返されます。
4.まとめ
これらの例は、「=」演算子が 2 つのオブジェクトの参照が同じかどうかを比較し、equals() メソッドが 2 つのオブジェクトに含まれる内容が等しいかどうかを比較することを示しています。 String 型のオブジェクトの場合、通常、「=」演算子を使用するのではなく、equals() メソッドを使用して、含まれている文字列が等しいかどうかを比較します。