我有两个不同的同一实体“社区”对象
两个对象(社区和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 ..为什么?我做错了什么?这两个对象都是从数据库中检索的!
答案 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)
==运算符比较两个对象的内存地址,在您的情况下,comm和community必须是存储在两个不同内存地址的两个不同对象
答案 7 :(得分:0)
您正在比较两个不同的对象communityId。 是否有必要将communityId声明为Integer?因为Integer是一个对象。 为什么不简单地用基本类型int声明communityId; int communityId应该可以工作。