Javaの「==」とequals()の違い
関係演算子「==」について、「Javaプログラミング思考」では次のように説明されています。「関係演算子はブール結果を生成し、それらの間の関係を計算します。オペランドの値」。ここでのオペランドの「値」は注目に値します。 8 つの基本データ型 (boolean、byte、char、short、int、float、double、long) の場合、それらの変数には「値」が直接格納されます。したがって、「==」を使用して基本データ型の変数を比較する場合、実際の比較は変数に格納されている値です。たとえば:
public static void main(String[] args) { int a = 5, b = 5; System.out.println(a == b); }
もちろん、プログラムは true を出力します。しかし、次のコードはどうでしょうか?
public static void main(String[] args) { Integer c = new Integer(5), d = new Integer(5); System.out.println(c == d); }
プログラムを実行したところ、出力が false であることがわかりました。これは、Integer が Java の基本的なデータ型ではないためです。その変数 c および d は、Java ではオブジェクトを指す参照と呼ばれ、値「5」そのものではなく、メモリ内のオブジェクトのアドレスです。したがって、c と d は実際には、それぞれ値「5」を持つ 2 つの Integer オブジェクトのアドレスを格納します。これら 2 つのオブジェクトは同じメモリ空間になく、「==」比較の結果は当然 false になります。
それでは、equals()メソッドは何を比較するのでしょうか? equals() は、基本クラス Object で定義されたメソッドです。 Object クラスでは、equals() メソッドは次のように定義されます。
public boolean equals(Object obj) { return (this == obj); }
これは、「==」と同等です。実際、equals() メソッドの重要性は書き換えにあり、そうでない場合は、equals() の呼び出しは無意味です。たとえば、Object から継承された Integer クラスは、equals() メソッドをオーバーライドします。
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
このメソッドの意味は、値を比較することであり、同じ値を持つ 2 つの Integer オブジェクトに対して equals() を呼び出すと、次のようになります。比較:
public static void main(String[] args) { Integer c = new Integer(5), d = new Integer(5); System.out.println(c.equals(d)); }
結果は true です。
読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!
Java の「==」と「equals()」の違いに関する詳細な記事については、PHP 中国語 Web サイトに注目してください。