我正在做学校作业,需要存储一堆联系人。每个联系人都有一个社交网络帐户,地址和电话号码的HashSet
。
我不想在我的HashSet
中存储同一对象的多个副本,因此我已经为每个对象覆盖了hashCode()
和equals()
方法。
但是,仅对于我的社交网络帐户对象,我的HashSet
将同一对象存储两次!
我有两个不同的对象:
SocialNetworkAccount s1 = new SocialNetworkAccount(SocialNetworkAccount.AccountType.FACEBOOK, "wallcrawler123");
SocialNetworkAccount s2 = new SocialNetworkAccount(SocialNetworkAccount.AccountType.FACEBOOK, "wallcrawler123");
s1.equals(s2)
返回true
,并且s1.hashCode() == s2.hashCode()
返回true
,但是s1 == s2
返回false
!为什么?这是我正在使用的
hashCode()
方法:public int hashCode() {
int prime = 31;
int result = 1;
result = result*prime + type.hashCode();
result = result*prime + id.hashCode();
return result;
}
最佳答案
==运算符比较引用。由于存在两个不同的对象,因此它们的引用将有所不同。
SocialNetworkAccount s1 = new SocialNetworkAccount(SocialNetworkAccount.AccountType.FACEBOOK, "wallcrawler123");
SocialNetworkAccount s2 = s1;
if (s1 == s2) {
System.out.println("The references are the same.");
}