Posted on Monday, July 10, 2006 9:09 AM
package base;
import java.util.Date;
/**
* 复写equals方法
* */
public class JavaEquals {
private int i = 0;
private String name = "";
private Date date = new Date();
/**
* Java规范中复写equals的要求::
* 1、自反性:对于任意非空引用x,x.equals(x)应返回true
* 2、对称性:对于任意非空引用x、y,当且仅当y.equals(x)返回true时,x.equals(y)也返回true
* 3、传递性:对于任意引用x、y、z,如果x.equals(y)返回true且y.equals(z)返回true,那么x.equals(z)应返回true
* 4、一致性:如x和y引用的对象没有改变,那么对x.equals(y)的重复调用应返回同一结果
* 5、对任意非空引用x,x.equals(null)应返回false
* */
public boolean equals(Object otherObject) {
if (this == otherObject)
return true;
if (null == otherObject)
return false;
if (getClass() == otherObject.getClass())
return true;
JavaEquals javaEquals= null;
if (otherObject instanceof JavaEquals)
javaEquals = (JavaEquals)otherObject;
else
return false;
return i == javaEquals.i && name.equals(javaEquals.name) && date == javaEquals.date;
}
public String toString() {
return getClass().getName();
}
public static void main(String[] args) throws Exception {
JavaEquals javaEquals = new JavaEquals();
System.out.println(javaEquals.equals(null));
System.out.println(javaEquals.equals(new Date()));
System.out.println(javaEquals.equals(new JavaEquals()));
System.out.println(javaEquals.equals(JavaEquals.class.newInstance()));
System.out.println(javaEquals.equals(new SubJavaEquals()));
System.out.println(javaEquals.equals(SubJavaEquals.class.newInstance()));
System.out.println(new SubJavaEquals());
}
}
class SubJavaEquals extends JavaEquals {
private int i = 0;
private String name = "";
private Date date = new Date();
}