equals方法实现的功能是判断两个对象的内容是否相同,Object类中该方法的实现很简单,代码如下:
public boolean equals(Object obj){
return (this==obj);
}
如果真正需要在项目中进行比较时,这个equals方法的作用是无法达到实际要求的,所以如果在项目中涉及的类需要比较该类型的对象时,则必须重写equals方法。
package container;
public class Name {
private String first;
private String last;
public Name(String f, String l) {
this.first = f;
this.last = l;
}
/*
* 必须重写toString()方法,若不重写,则打印出来[container.Name@44585f2a],
* 因为默认调用的就是该对象的toString()方法
*/
public String toString() {
return this.first + " " + this.last;
}
/*
* 由于在String和基本数据类型封装器中已经重写了equals方法, 而在name类中没有重写, 所以无法删除name对象
* 那么必须重写name的equals方法
*/
public boolean equals(Object obj) {
if (obj instanceof Name) {
Name name = (Name) obj;
return first.equals(name.first) && last.equals(name.last);
}
return super.equals(obj);
}
// 重写类的equals方法必须重写类的hashCode方法
public int hashCode() {
return first.hashCode();
}
}
/*equals方法编写示例*/
package container;
public class MyEquals {
/*
* 对象成员变量
*/
String name;
/*
* 基本数据类型成员变量
*/
int n;
/*
* 判断对象内容是否相同
*
* @param obj需要比较的对象
*/
public boolean equals(Object obj) {
// 若比较的内容是本身
if (obj == this) {
return true;
}
// 对象类型不同
if (!(obj instanceof MyEquals)) {
return false;
}
// 转换成当前类类型
MyEquals m = (MyEquals) obj;
/*
* 依次比较对象中每个变量
*/
// name属性不同
if (!name.equals(m.name)) {
return false;
}
// n属性不同
if (!(n == m.n)) {
return false;
}
// 如果都相同,则返回true
return true;
}
}