zoukankan      html  css  js  c++  java
  • java中equals,hashcode和==的区别

    java中equals,hashcode和==的区别

    首先Java中的数据类型分为基本数据类型和引用数据类型。

    1. 基本数据类型包括byte,short,char,int,long,float,double,boolean

    2. 引用数据类型有类、接口、数组、集合等。

    ==

    1. 基本数据类型使用==比较的是数值。
    2. 引用数据类型使用==比较的则是他们的地址。所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
    对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 
    

    equals

    1. 默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。下面是Object类中equals方法(定义的equals与==是等效的):
    public boolean equals(Object obj) {  
        return (this == obj);  
        }  
    
    1. 要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。

    这里对equals重新需要注意五点:
    1. 自反性:对任意引用值X,x.equals(x)的返回值一定为true.
    2. 对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
    3. 传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
    4. 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
    5. 非空性:任何非空的引用值X,x.equals(null)的返回值一定为false

    hashcode

    hashCode()方法返回的就是一个数值,从方法的名称上就可以看出,其目的是生成一个hash码。hash码的主要用途就是在对对象进行散列的时候作为key输入,据此很容易推断出,我们需要每个对象的hash码尽可能不同,这样才能保证散列的存取性能。事实上,Object类提供的默认实现确实保证每个对象的hash码不同(在对象的内存地址基础上经过特定算法返回一个hash码)。Java采用了哈希表的原理。 哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际并不是)
    所有散列函数都有如下一个基本特性:
    1. 如果a=b,则h(a) = h(b)。
    2. 如果a!=b,则h(a)与h(b)可能得到相同的散列值。

  • 相关阅读:
    Java入门总结
    Java安装JDK
    ExcelPackage 读取、导出excel
    An error occurred while starting the application.
    EF core2.1+MySQL报错'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBuilder..ctor(Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMapper)
    数据表转换类
    The requested URL /xxxx.html was not found on this server
    .htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
    B2B多商铺初期权限数据库设计
    数据库持久化比较
  • 原文地址:https://www.cnblogs.com/cuianbing/p/14475112.html
Copyright © 2011-2022 走看看