关于equals方法和hashcode方法重写的问题

 一.equals方法:

  1.hashcode方法和equels方法都来自object,equals方法不重写的话,和==的作用是相同的。

     在重写equals的时候,注意一般需要满足的特性:

    ①自反性:这个略掉

    ②非空性:即任何非空引用x.equals(null)都应该返回false。null是不确定的,null和null比较是没有意义的

    ③对称性:即x.equals(y)和y.equals(x)在结果上是一致的。于是这里的话根据第二个非空性,就都要求两个引用都应该是非空的

  2.equals方法重写的一般步骤:

    

   public boolean equals(Object obj) {
        //首先比较两个引用是不是同一个
        if(obj==this){
            return true;
        }//如果不是同一个引用,再来比较内容是不是相同
        else if(obj!=null&&obj.getClass()==this.getClass()){//instanceof 运算符是用来在运行时指出对象是否是特定类/或者它的子类的一个实例,
            Student obj1=(Student) obj;
            return this.getId().equals(obj1.getId())&&this.getName().equals(obj1.getName());
        }else if(obj==null||this==null){
            return false;
        }
        return false;
    }

    假设student有String name和Integer id两个属性。

  3.hashcode方法概念上将是,散列数据的方法,目前理解成是便于快速高效比较两个对象是不是相等的一种方法,hashcode相等是两个对象相等的必要条件。

posted @ 2017-08-12 20:52  小飞vsKK  阅读(234)  评论(0)    收藏  举报