equals()方法应该有其
自反性:x.equals(x)一定为true
对称性: x.equals(y)为true当且仅当y.equals(x)也为真
传递性:x.equals(y)为true,y.equals(z)为true,那么x.equals(z)一定为true
一致性: 调用了若干次,返回的值应该都是相同的
谨慎性:x.equals(null)一定返回false,也会可能抛出异常
public class Equals2 {
int int1;
SomeClass obj1; /** 构造函数 */
public EqualsDemo(int i, SomeClass o) {
int1 = i;
obj1 = o;
} public EqualsDemo() {
this(0, new SomeClass());
} /** 典型的equals方法*/
public boolean equals(Object o) {
if (o == null) // 谨慎性
return false;
if (o == this) // 优化
return true; // Castable to this class?
if (!(o instanceof EqualsDemo))
return false; EqualsDemo other = (EqualsDemo)o; // 类型转换 // compare field-by-field
if (int1 != other.int1) // 直接比较
return false;
                  // 用equals方法进行比较
if (!obj1.equals(other.obj1))
return false;
return true;
}
}