0

次の質問があります。2 つの空のオブジェクトがあり、equals() メソッドを使用してそれらを比較しています。これは、equals メソッドがオブジェクトの内容を比較することがわかっているためですが、この場合、オブジェクトにプロパティがありません。

   Object ob1 = new Object();
   Object ob2 = new Object();
    if(ob1.equals(ob2)){
        System.out.println(" they are Equal");
    }
    else{ 
        System.out.println("not equal");
    }
    if(ob1 == ob2){
        System.out.println(" they are Equal");
    }
    else{ 
        System.out.println("not equal");
    } 

== オブジェクトの参照を比較することがわかっています

equals メソッドはここで何を比較しますか??

前もって感謝します ...

4

5 に答える 5

3

Object.equals JavaDocから:

クラス Object の equals メソッドは、オブジェクトに対して最も識別可能な等価関係を実装します。つまり、null 以外の参照値 x と y の場合、このメソッドは、x と y が同じオブジェクトを参照している (x == y の値が true である) 場合にのみ true を返します。

于 2013-08-22T09:40:24.017 に答える
2

ここに記載されているように、参照も比較します。

equals メソッドは、null 以外のオブジェクト参照に対して等価関係を実装します。

これは再帰的です: null 以外の参照値 x に対して、x.equals(x) は true を返す必要があります。
これは対称的です: null 以外の参照値 x と y の場合、y.equals(x) が true を返す場合に限り、x.equals(y) は true を返す必要があります。
これは推移的です: null 以外の参照値 x、y、および z に対して、x.equals(y) が true を返し、y.equals(z) が true を返す場合、x.equals(z) は true を返す必要があります。
一貫性があります。null 以外の参照値 x および y に対して、x.equals(y) の複数の呼び出しは一貫して true を返すか、一貫して false を返します。ただし、オブジェクトの equals 比較で使用される情報が変更されていない場合に限ります。
null 以外の参照値 x の場合、x.equals(null) は false を返す必要があります。

于 2013-08-22T09:39:43.073 に答える
1

両方のオブジェクトnull

 if(ob1==null && ob2==null)

やろうとすると、ob1.equals(null)が得られNullPointerExceptionます。ob1 以来、それは自分自身nullです。

于 2013-08-22T09:41:28.743 に答える
0
  1. == 演算子は、同じ場所を指しているかどうかにかかわらず、ヒープ内のオブジェクトの参照またはメモリの場所を比較します。

  2. equals() メソッドの主な目的は、2 つのオブジェクトの状態またはオブジェクトの内容を比較することです。

しかし、あなたはObjectクラスequals()メソッドを使用しています。

equals() メソッドのオブジェクト クラスの既定の実装は == のように機能します。つまり、オブジェクトが同じ場所を指している場合、オブジェクトのメモリ参照をチェックします。

注: このデフォルトの実装は、String、Wrapper クラスなどのクラスでコンテンツ比較を行うためにオーバーライドされます。

于 2013-08-22T09:51:17.333 に答える