我正在做学校作业,需要存储一堆联系人。每个联系人都有一个社交网络帐户,地址和电话号码的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.");
}

07-28 13:31