• Oblect类之hashCode和equals


    1、hashCode的默认实现。显然是一个本地方法。

    2、equals的默认实现。默认equals在比较两个对象时,是看他们是否指向同一个地址的。“==”操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

     

    3、重写equals的原因是什么?

       判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。

       首先,为什么要重写equals()方法。我们在定义类时,我们经常会希望两个不同对象的某些属性值相同时就认为他们相同,所以我们要重写equals()方法,按照原则,我们重写了equals()方法,也要重写hashCode()方法。

    我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法。

    4、重写equals的规则是什么?

       (1)、自反性:对于任何非空引用x,x.equals(x)应该返回true。
       (2)、对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。
       (3)、传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
       (4)、一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。
       (5)、非空性:对于任意非空引用x,x.equals(null)应该返回false。

    5、如何重写equals方法。(同地址/null/类型/类型转换/内容。)

    6、举例说明重写equals方法。
       (1)自定义类的equals重写。
       (2)String类的equals方法实现。地址/类型/类型转换/内容。
    7、重写了equals方法后,为什么必须重写hashCode方法?
       (1)、首先,这是由于equals与hashCode之间的关系。
    如果两个对象equals比较相等,那么这两个对象的hashCode必须相等。
    两个对象的hashCode不相等,那么两个对象equals比较一定不相等。
    两个对象的hashCode相等,那么两个对象equals比较不一定相等。
    如果不重写就可能出现,equals相等但是hashCode不相等,hashCode不相等但是equals相等。
       (2)、在集合框架中,比如HashSet,HashMap,HashTable等中都需要使用hashCode方法和equals方法。存储key时先判断key的hashCode,,
     
    8、如何重写hashCode方法。
    (1)同一个对象多次调用hashCode()方法应该返回相同的值;
    (2)当两个对象通过equals()方法比较返回true时,这两个对象的hashCode()应该返回相等的(int)值;
    (3)对象中用作equals()方法比较标准的Filed(成员变量(类属性)),都应该用来计算hashCode值。比如一个类中只要name和age属性相同就认为相同,则可以写成:
    @Override
    public int hashCode() {
    int result = 17;
    result = result * 31 + name.hashCode();
    result = result * 31 + age;
    return result;
    }
    9、

     

  • 相关阅读:
    极客标签编程小挑战#31:生成注册页面的显示效果
    极客Web前端开发资源大荟萃#017
    知道你们不想撸代码写PPT之可视化页面做一款炫酷的WEB PPT
    使用jQuery图表插件Sparklines来开发一个实用的网站PV(page view)实时监控应用
    javascript专业八级测试答案整理
    使用Raphaël类库实现的超酷动画技能图表
    极客编程小挑战#26:实现日期级联下拉选择框
    gulp初印象
    程序语言,编译?解释?
    发了这嘛多技术文章,今天给大家点福利吧!邻家小美女一枚,想在北京找个工作,大家来看看给出点主意。
  • 原文地址:https://www.cnblogs.com/igoodful/p/9203242.html
Copyright © 2020-2023  润新知