1.
使用
==
操作符检查
“
实参是否为指向对象的一个引用
”
。如果是的话,则返回
true
。
2.
使用
instanceof
操作符检查
“
实参是否为正确的类型
”
。如果不是的话,则返回
false
。
3.
把实参转换到正确的类型。因为前面已经有了
instanceof
测试,所以这个转换可以确保成功。
4.
对于该类中每一个关键域,检查实参中的域与当前对象中对应的域值是否匹配。如果所有的测试都
成功,则返回
true
;否则返回
false
。
我的相关实验:
package test2;
public class Test2 {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof Test2) {
Test2 tobj = (Test2) obj;
return this.msg != null ? this.msg.equals(tobj.msg) : tobj.msg == null;
}
return false;
}
public int hashcode() {
return this.msg != null ? this.msg.hashCode() : "".hashCode();
}
public static void main(String[] args) {
Test2 t1 = new Test2();
System.out.println(t1.equals(t1));
t1.setMsg("good");
Test2 t2 = t1;
System.out.println(t1.equals(t2));
t1.setMsg(null);
Test2 t3 = new Test2();
System.out.println(t1.equals(t3));
}
}
输出如下:
true
true
true
true
true