1

同じエンティティ「コミュニティ」の2つの異なるオブジェクトがあります</p>

そして、2つのオブジェクト(コミュニティとcom)は同じ値を持っています

Communty.javaには次の変数があります。

   private Integer communityId;
   private String communityName;
   private String description;

   // many to many relationship
   private Set<Faculty> faculties = new HashSet<Faculty>();
   private Set<User> users = new HashSet<User>();

そして私は次のように等しい方法を使用しました:

@Override
   public boolean equals(Object obj) {
          // TODO Auto-generated method stub
          if(obj==null)
                 return false;
          if(obj==this)
                 return true;
          if(!(obj instanceof Community)) return false;

          Community community = (Community)obj;
          return community.getCommunityId() == this.getCommunityId();
   }

チェックするcommunity==comとfalseが返されます..なぜですか?私はどんな間違いをしましたか?両方のオブジェクトがデータベースから取得されます。

4

8 に答える 8

8

==オブジェクトへのリンクを比較します。

明示的に呼び出す必要がありますcommunity.equals(com)nullチェックにも注意してください。

于 2012-12-27T11:23:21.480 に答える
3

==ではなくを使用してオブジェクト(ID)を比較しているためですequals()==両方の変数が同じオブジェクトを参照しているかどうかをテストします。equals()2つの変数が2つの機能的に等しい整数(つまり、同じint値を持つ)を参照しているかどうかをテストします。

==列挙型を除いて、を使用してオブジェクトを比較することは、ほとんどの場合バグです。

于 2012-12-27T11:24:26.130 に答える
2

==オブジェクトの内容に関係なく、2つの異なる場所を指している可能性のある2つの参照を比較します。

community.equals(com)平等をチェックするために使用する必要があります」

また、equalsメソッドには次のセグメントが含まれています。

community.getCommunityId() == this.getCommunityId()

オブジェクトと同様に、演算子communityIdは、インターンのために[-127、128]の範囲にない整数値に対して負の結果を与える可能性があります。これは別の概念であり、後で確認できます。Integer==

equals()そこでも使用するか、を比較する必要があります。intValue()

return community.getCommunityId().equals(this.getCommunityId())
于 2012-12-27T11:25:33.760 に答える
1

equalsメソッドの問題は、==オブジェクトに演算子を使用していることです。ここで、trueを返すには、CommunityIdが同じオブジェクトである必要があります。

 return community.getCommunityId() == this.getCommunityId();

そのはず

 return community.getCommunityId().equals(this.getCommunityId());
于 2012-12-27T11:25:23.447 に答える
1

なぜなら、それらは同じオブジェクトを参照していないからです。==両方が同じオブジェクトを参照しているかどうかを確認するために使用されます。

==オブジェクトについては同じを参照してください。

equalsコンテンツの同等性。

これを試して

return community.getCommunityId().equals(this.getCommunityId());
于 2012-12-27T11:22:54.723 に答える
0

2つの異なるオブジェクトcommunityIdを比較しています。communityIdを整数として宣言する必要がありますか?整数はオブジェクトだからです。プリミティブ型intを使用してcommunityIdを単純に宣言してみませんか。intcommunityIdが機能するはずです。

于 2012-12-27T11:42:17.827 に答える
0

community == comをチェックすると、falseが返されます。なぜ

これの意味は; これらの2つの参照はまったく同じです。つまり、同じオブジェクトに。あなたが意図したのは

boolean equal = community.equals(com);

ところで、あなたのif (obj == null)チェックは冗長です。

于 2012-12-27T11:23:52.807 に答える
0

== Javaの演算子は、2つのオブジェクトのメモリアドレスを比較します。この場合、commとcommunityは、2つの異なるメモリアドレスに格納された2つの異なるオブジェクトである必要があります。

于 2012-12-27T11:26:16.933 に答える