この投稿では、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)
お読みいただきありがとうございました。