可以自定义equals和hashCode方法
eg:
public class TestHashCodeAndEquals {
private String firstName ;
private String lastName ;
public int hashCode( ) {
//源码默认17,37
return new HashCodeBuilder( 17 , 37 )
.append(firstName)
.append(lastName).toHashCode( );
}
public boolean equals(Object o) {
if (o == null) {
return false;
}
/**判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。
如果是则返回 true;否则返回 false*/
if (!TestHashCodeAndEquals.class.isAssignableFrom(o.getClass()) ) {
return false;
}
TestHashCodeAndEquals pc = (TestHashCodeAndEquals) o;
return new EqualsBuilder()
.append(firstName, pc.firstName)
.append(lastName, pc.lastName).isEquals( );
}
1.当有相同的firstname和lastname时,认为两个对象的hashCode相同,从而equals()返回true.
2.EqualsBuilder会依次比较数组中的每个元素
其他情况写法
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
1.如果两个对象相等当且仅当每个属性值都相等。
2.如果hashCode取决于该class的所有filed时需要使用反射机制来产生一个hashCode。