1重写equals方法
- 自反性
对于任何引用,只要其不为null那么对自身使用equals方法将永远返回true(x.equals(x)返回true)。 - 对称性
- 传递性
- 一致性
- 对于任何非空引用值a和b,用其对null进行equals检查应当始终返回false,也就是说a.equals(null)正反等于false
下面给出实例
package xuming;
class Student {
String name;
int age;
int classNum;
public Student(){
}
public Student( String name, int age, int classNum){
this.name = name;
this.age = age;
this.classNum=classNum;
}
//重写equals方法
public boolean equals (Object o){
//测试是否指向同一个对象
if(this==o) {return true;}
//测试引用o是都为null
if(o==null) {return false;}
//测试o指向的对象是都可以看作Student类型
if(!(o instanceof Student)) {return false;}
//将引用进行强制类型转换
Student s = (Student) o;
//测试相关属性内容
if(this.name.equals(s.name)
&&this.age==s.age
&&this.classNum==s.classNum)
{
return true;}
else
{
return false;
}
}
//重写hashcode方法
public int hashCode(){
//return a new hash code ,与成员属性有关
return 7*this.name.hashCode() +
13*Integer.valueOf(this.age).hashCode() +
17*Integer.valueOf(this.classNum).hashCode();
}
}
// main class
public class Sampled142{
public static void main(String[] args){
Student a1 = new Student("jc",21,1000);
Student a2 = new Student("jc",21,1000);
if(a1.equals(a2)){
System.out.println("学生对象1和2是等价的 其哈希码分别是");
System.out.println(a1.hashCode()+"and"+a2.hashCode());
}
else{
System.out.println("不等价");
}
}
}