equals方法范例,equals范例,由于Object类默认提
分享于 点击 49832 次 点评:84
equals方法范例,equals范例,由于Object类默认提
由于Object类默认提供的equals方法,只是比较对象的地址,即其比较的结果和"=="的结果是一样的.
而实际应用中,对象是否相等是由对象特征所决定的,由此Object提供的equal方法,不可用,需要重写.
而写equals方法,应试满足下列条件:
自反性:对任意X,X.equals(X)一定返回为true;
对称性:对任意X,Y,如果X.equals(Y)为true,那么Y.equals(X)也必须为true;
传递性:对任意X,Y,Z,如果X.equals(Y)为true,Y.equals(Z)为true,那么X.equals(Z)也必须true;
一致性:对任意X,Y,如果对象中用于比较的信息,没有发生改变,那么无论调用多少次X.equals(Y),或者Y.equals(X),其结果必须是一样的.要么一直为true,要么一直为false;
对任何不是null的X,X.equals(null),必须为false;
另:有部分人在equals()方法中,用了instanceof运算,但是其有一定问题.
instanceof判断是的前面对象为否为类的实例或其子类,如果则返回true.
package com.study;public class Dog { int id; String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public boolean equals(Object obj) { //同一对象直接返回true; if (this == obj) { return true; } //只有当obj不为空,且为当前类时,才做对象特征比较 if (obj != null && obj.getClass() == Dog.class) { Dog dog = (Dog) obj; if (this.getId() == dog.getId()) { return true; } } return false; }}//该片段来自于http://byrx.net
用户点评