zoukankan      html  css  js  c++  java
  • Object重写equals()、hashcode()方法的原因

    一、问题

      在我们新建java对象的时候,如果后期用到对象比较,就必须重写equals(0、hashcode()方法

      为什么必须重写这两个方法?

      只是比较相等的话,重写equals()方法不就可以吗?为什么还要重写hashcode()方法?

      参考文章:【http://blog.csdn.net/zhangqindabendan/article/details/54800303

    二、分析

      (1)必须重写【equals()】的原因:

        Object类比较对象相等的原理是:

          【比较相等的两方指向同一对象】  

          【对于任何非空引用值 x 和 y ,当且仅当 x 和 y 引用同一对象(同一块内存地址),此方法才返回 true】 

        实际比较相等时:

          【我们认为保存数据相同的对象就相等,不关心是否同一内存地址】

          【new出来的对象内存地址永远不相同】

      (2)必须重写【hashcode()】的原因:

        hashcode()方法的常规协定:该协定声明相等的对象必须具有相等的哈希码

          【当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true】

          【当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false】

        没有重写该方法的后果:

          【某些利用对象hashcode值做为索引的情况下,会造成混乱,相当于没有重写equals方法】

      (3)equals()方法重写规定:

          【自反性、对称性、传递性、一致性】

        

          

        

  • 相关阅读:
    Delphi的对话框窗体
    Delphi中窗体的事件
    TForm类有关属性简介
    Delphi的工具栏
    一个简单的MDI示范程序(Delphi)
    Delphi的组件选项卡(Component Palette)
    最简单的多重窗体的应用(Delphi)
    发现一个SVG做的地图网站:ChinaQuest
    计算最近点和最近线段
    寻找MapBar的地图切割方法
  • 原文地址:https://www.cnblogs.com/hackxiyu/p/8397963.html
Copyright © 2011-2022 走看看