ホームページ  >  記事  >  Java  >  Javaの「==」と「equals()」の違いを詳しく解説

Javaの「==」と「equals()」の違いを詳しく解説

高洛峰
高洛峰オリジナル
2017-02-03 13:33:401297ブラウズ

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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。