zoukankan      html  css  js  c++  java
  • "=="、equals、hashCode之间的区别

    1. "=="分为两种情况:

          (1) 基本数据类型,比较的是其对应的值是否相等;

          (2) 引用类型,比较的是他们在内存中存放的地址(或者说,是否指向同意对象)。

    2. equals:

           是Object类提供的方法之一,在Object类中的定义就是直接使用"=="进行比较,所以在没有覆盖equals()方法的情况下,equals()与"=="是一样的。

    boolean equals(Object o){
         return this = o;  
    }

           相比于"==",equals()方法是可以被覆盖的。比如,在一些类库(String,Integer,Date等)中,equals()方法比较的是对象的内容是否相同。如果希望编写的类可以比较该类创建的两个实例对象的内容是否相等是,那么必须要覆盖equals()方法。

    3. hashCode

            hashCode()方法是从Object类中继承过来的,也是用来鉴定两个对象是否相等,返回的是对象在内存中地址转换成的一个int值。所以,如果没有重写hashCode()方法,任何对像的hashCode()方法都不是相等的。

            hashCode()与equals()的区别:equals()方法是给用户调用的;对于hashCode()方法,用户一般不会去调用它。两者的不同之处在于,hashCode()返回的是int型,比较起来不直观。

            一般在覆盖equals()的同时也要覆盖hashCode()。hashCode()的返回值与equals()的关系如下:

           (1) 如果x.equals(y)返回true,那么调用这两个对象中任意一个对象的hashCode()方法都必须产生同样的整数结果。

           (2) 如果x.equals(y)返回false,那么x和y的hashCode()方法的返回值可能相等,也可能不等。

           (3) 如果hashCode()方法的返回值不相等,一定能推出来equals()方法的返回值也不相等。

  • 相关阅读:
    UIView用户事件响应
    登录模块之静态登录
    对C# 中Readonly的再认识
    [Android学习笔记4]四大应用组件之一:Service 上
    修改XPMenu让ToolButton在Down=True时正确显示
    通过程序预览Office文档
    发掘ListBox的潜力(三):显示即时提示(Tips)
    从网络上下载文件的两种方法
    解决窗体闪烁问题的方法
    C/C++中动态链接库的创建和调用
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6559115.html
Copyright © 2011-2022 走看看