zoukankan      html  css  js  c++  java
  • eaquls(),hashCode(),==

    1.为什么要重写equals()方法

      1.equals()是Object类中的方法;

      2.equals方法用于比较两个对象是否相同,Object类中equals方法的实现是比较引用地址来判断的对象是否是同一个对象,通过覆盖该方法可以实现自定义的判断规则;

      3.如果我们自定义类有两个对象,他们的属性是相同的,但是地址不同,这样使用equals()比较得出的结果是不相等的,而如果业务需求的是这两个对象相等,因此默认的equals()方法是不符合我们的要求的,这个时候我们就需要对equals()方法进行重写以满足我们的预期结果。

      4.在java的集合框架中需要用到equals()方法进行查找、新增对象,如果集合中存放的是自定义类型,并且没有重写equals()方法,则会调用Object父类中的equals()方法按照地址比较,往往会出现错误的结果,此时我们应该根据业务需求重写equals()方法。

    2.为什么要重写hashCode()方法 

      1.hashCode是jdk根据对象的地址或者字符串或者数字计算该对象的哈希码值的方法。

      2.hashCode()是Object类中的方法,用于散列数据的快速存储,HashSet/HashMap/Hashtable类存储数据时都是根据存储对象的hashcode值来进行分类存储的,一般先根据hashcode值在集合中进行分类,再根据equals()方法判断对象是否相同。

      3.HashMap对象是根据其Key的hashCode来获取对应的Value。

    3.为什么重写equals()一定要重写hashCode()

    为了维护hashCode()方法的equals协定,该协定指出:

      如果两个对象相同( 根据equals()方法 ),那么它们的hashCode值一定要相同;而两个hashCode()返回的结果相等,两个对象的equals()方法不一定相等。告诉我们重写equals方法,一定要重写hashCode方法,也就是说hashCode值要和类中的成员变量挂上钩,对象相同–>成员变量相同—->hashCode值一定相同。 

    4.eauqls() 和 = =

      Object类中的equals方法和“==”是一样的,没有区别,即俩个对象的比较是比较他们的栈内存中存储的内存地址。而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,他们比较的是值是不是相等

  • 相关阅读:
    在mysql中计算百分比
    给指定的div增加滚动条
    Java高效编程之三【类和接口】
    Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
    MapReduce:详解Shuffle过程
    Java高效编程之二【对所有对象都通用的方法】
    Java高效编程之一【创建和销毁对象】
    ANT命令总结(转载)
    linux 压缩文件的命令总结
    Cloudera CDH 、Impala本地通过Parcel安装配置详解
  • 原文地址:https://www.cnblogs.com/yjh1995/p/12028040.html
Copyright © 2011-2022 走看看