Difference between == and equals() in Java

この投稿では、Javaにおける==演算子とequals()メソッドの違いを説明します。

はJavaの関係演算子で、intやdouble、char、floatなどの基本型の比較に使われるもの。 NULLでない参照値xとyに対して、x == yはxとyが同じオブジェクトを参照しているときのみ真を返すからです。

equals()は、一方ではオブジェクトの比較に使われるObjectクラスのメソッドです。 クラスでオーバーライドされていない場合は、==演算子と似たような動作をします。 すべてのクラスはObjectクラスのequals()メソッドをオーバーライドして、オブジェクトの等価関係を指定する必要があります。 等価関係は、2つのオブジェクトが同じインスタンスを参照しているかどうかに関係なく、equals()メソッドがオブジェクトの値の比較として評価されるようなものでなければならない。

JavaではStringはオブジェクトなので、2つの文字列の比較には常にequals()メソッドを使用すべきです。 String クラスは Object クラスの equals() メソッドをオーバーライドしているからです。

上のプログラムからわかるように、==equals() を使って二つの文字列を比較すると異なる出力が返ってきます。 これは、==が参照比較、つまり2つの変数が同じオブジェクトを参照しているかどうかを比較しているためです。 Stringコンストラクタを使用して2つの新しいStringオブジェクトを作成しているので、それらは同じ参照を共有せず、s1 == s2は偽を返します。

一方、Stringクラスのequals()メソッドは、バックされた文字配列の内容を比較し、比較の結果としてブール値を返します。 これは、StringリテラルはString定数プールに格納されており、s1 & s2の両方が同じ参照を共有するためです。

(6 票、平均 : 5.00 / 5)

お読みいただきありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。