-3

私はしばらくこれで立ち往生しています。実際には、私によれば同じ2つのオブジェクトがあります.hashCodeメソッドをオーバーライドして、両方に等しいハッシュコードを作成しました.「==」またはオブジェクトの equals (これも "==" を使用)、それは私に false を返します。以下のシナリオは正確に説明する必要があります:::

1)HashCode-->-626561382 AND 2)HashCode--->-626561382  
1)IdentityHashCode-->19640463
2)IdentityHashCode-->22330755  
1)Bean1=beans.OrdersBean@daa76e9a  AND 2)Bean2=beans.OrdersBean@daa76e9a  
Check MySelf for(==)-->false  
Check Object's Equals()-->false

どうしてこうなったのか教えてください????

4

5 に答える 5

10

==演算子は、Java のオブジェクトの参照 (メモリの場所) を比較します...

オブジェクトを比較する場合は、使用します.equals()

if(obj1.equals(obj2)){

}
于 2012-07-27T12:56:44.950 に答える
4

equals2 つのオブジェクトを等しい値で比較するには、メソッドをオーバーライドする必要があります。

他の人が言及した==演算子は、参照を比較します(つまり、まったく同じオブジェクトですか)

説明

一卵性双生児のベンとアダムを例にとると、==ベンはアダムではないため (見た目は同じですが)、2 つを比較すると an を使用すると false.equalsが返されます。 .

于 2012-07-27T12:57:51.393 に答える
3

Java では==参照を比較するために使用されます。2 つのオブジェクトが同等かどうかを評価するには、 を使用しますequals

カスタム オブジェクトを比較する必要がある場合はequals、同等の基準に従って、クラスでオーバーライドすることを検討してください。

于 2012-07-27T12:57:35.763 に答える
1

.equals親のメソッドからオーバーライドしObjectます。これは「より深い」比較を目的とし==ていますが、参照 (識別子) が同じインスタンス化を参照していること (一方への更新が両方に適用されるようにするため) のチェックに関連しています。

于 2012-07-27T12:57:37.277 に答える
0

1. '==' の使用:

2 つの参照変数が同じオブジェクトを参照しているかどうかを確認するには、Java で==演算子を使用する必要があります。例-( Personというクラスがあると仮定します)

Person person1 = new Person();
Person person2 = person1;

System.out.println(person1 == person2); // true

ここではnewを1 回だけ使用したため、ヒープ メモリ内に作成されるオブジェクトは 1 つだけであり、それを参照変数 -> person1 に割り当てています。2 番目のステートメントでは、person1 を person2 に割り当てています。したがって、実際にはメモリ内に 1 つのオブジェクトしかありませんが、person1 と person2 の両方が同じオブジェクトを参照しています。

[要するに、プリミティブと同様に、== は参照変数の場合は実際のオブジェクトのメモリアドレスである変数の値を比較すると言えます]。

2. '.equals()' の使用:

2 つのオブジェクトが意味的に等しいかどうかを確認する場合は、.equals() メソッドを使用します。例えば ​​-

Person person1 = new Person();
Person person2 = new Person();

System.out.println(person1.equals(person2)); // false

ここでは、完全に 2 つの異なるオブジェクトを作成しているため、これらは意味的に同等ではありません。したがって、equals() メソッドは false を返します。

于 2013-01-07T16:32:17.967 に答える