比较Java中的两个对象

时间:2012-12-27 11:20:53

标签: java

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

两个对象(社区和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 ..为什么?我做错了什么?这两个对象都是从数据库中检索的!

8 个答案:

答案 0 :(得分:8)

==比较指向对象的链接。

您应该明确地致电community.equals(com)。还要处理 null 检查。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

==比较可能指向两个不同位置的两个引用,而不管对象内容如何。

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

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

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

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

你也需要在那里使用equals()或比较。intValue()

return community.getCommunityId().equals(this.getCommunityId())

答案 3 :(得分:1)

因为,他们不会引用同一个对象。 ==用于检查两者是否都引用相同的对象。

对象的

==引用相同的内容。

equals内容等效。

试试这个

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

答案 4 :(得分:1)

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

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

应该是

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

答案 5 :(得分:0)

  

当我检查community == com时,它返回false .. why

这意味着;这两个引用完全相同。即对同一个物体。你打算做什么

boolean equal = community.equals(com);

BTW您的if (obj == null)检查是多余的。

答案 6 :(得分:0)

Java中的

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

答案 7 :(得分:0)

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

相关问题