equals和hashcode的重写

来源:互联网 发布:千方百剂医疗器械软件 编辑:程序博客网 时间:2024/05/21 11:03

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 classpublic 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("不等价");    }        }    }
0 0