在Java中实现自定义类的Hashcode

Dud*_*ude 7 java hashcode

可能重复:
在Java中覆盖equals和hashCode

我应该为Custom class Person实现hashcode和equals.人包括

名字

我应该实现equals和hashcode,这样两个firstnamelastname的人应该为equals返回true,并且应该被Hashmap接受.我已经像这样实现了Person类:

public class Person {


    String firstname;
    String lastname;
    public Person(String firstname, String lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return firstname.hashCode()+lastname.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
    Person u=(Person) obj;

        return u.firstname.equals(firstname) && u.lastname.equals(lastname);
    }

}
Run Code Online (Sandbox Code Playgroud)

这里Hashcode的实现是否正确?即使我得到了预期的结果,我想知道这个实现是否正确?

MTi*_*ted 5

equals方法存在一个小问题,因为如果obj为null或不是a Person,它将引发异常,因此您应在equals的顶部添加以下内容:

if(obj==null || !(obj instanceof Person))
   return false;
Run Code Online (Sandbox Code Playgroud)

  • (null instanceof Person)始终为false,并且(obj instanceof Person)== false与!(obj instanceof Person)相同。因此,您的代码可以简化为:if(!(obj instanceof Person))返回false; (2认同)