1

我有同一个实体“社区”的两个不同对象</p>

并且两个对象(community 和 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). 还要注意检查。

于 2012-12-27T11:23:21.480 回答
3

因为您使用而不是比较对象(ID)==而不是equals(). ==测试两个变量是否引用同一个对象。equals()测试两个变量是否引用两个功能相等的整数(即具有相同的 int 值)。

使用 比较对象几乎总是一个错误==,除了枚举。

于 2012-12-27T11:24:26.130 回答
2

==比较可能指向两个不同位置的两个引用,而与对象内容无关。

你应该用它community.equals(com)来检查是否相等'

此外,您的 equals 方法包含以下部分:

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

作为communityId一个Integer对象,==由于实习,运算符可能会对不在 [-127, 128] 范围内的整数值给出否定结果,这是一个单独的概念,您可以稍后检查。

您也需要在equals()那里使用或比较 .intValue()

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

因为,它们不引用同一个对象。==用于检查是否都引用同一个对象。

==对象参考相同。

equals内容对等。

尝试这个

return community.getCommunityId().equals(this.getCommunityId());
于 2012-12-27T11:22:54.723 回答
1

您的 equals 方法的问题是您正在==为对象使用运算符。这里的 CommunityId 必须是同一个对象才能返回 true:

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

它应该是

 return community.getCommunityId().equals(this.getCommunityId());
于 2012-12-27T11:25:23.447 回答
0

当我检查 community==com 时,它返回 false .. 为什么

这表示; 这两个引用是否完全相同。即到同一个对象。你的意图是

boolean equal = community.equals(com);

顺便说一句,您的if (obj == null)支票是多余的。

于 2012-12-27T11:23:52.807 回答
0

== Java中的运算符比较两个对象的内存地址,在您的情况下, comm 和 community 必须是存储在两个不同内存地址的两个不同对象

于 2012-12-27T11:26:16.933 回答
0

您正在比较两个不同的对象 communityId。是否有必要将 communityId 声明为 Integer?因为整数是一个对象。为什么不简单地用原始类型 int 声明 communityId;int communityId 应该可以工作。

于 2012-12-27T11:42:17.827 回答