zoukankan      html  css  js  c++  java
  • Java中equals和==的区别?为什么重写equals方法后,一定要重写hashCode方法?

    首先明确一点,equals是方法,==是操作符。

    1. 如果比较的是基本数据类型:

     只讨论==,因为equals是不存在的,因为java中基本数据类型不能调用method的。

    2. 如果比较的是引用类型:

     ==:比较两个引用是不是指向同一个对象实例,即相同的地址。

    equals:equals方法是Object类的方法,默认是直接调用==来实现。如果没有被重写,那么调用equals与==没有区别。

    但是,在一些类库中这个方法被覆盖了,比如八大基本数据类型的包装类和String类,它们的equals方法比较的是值是否相同,此时的equals就与==有区别了。

    我们自己也可以根据需要,来重写equals方法。

    注意:

         hashCode方法也是可以来比较两个对象是否相等,但是很少直接使用。hashCode方法返回的是一个int值,可以看做是一个对象的唯一编码,如果两个对象的hashCode值相同,我们应该认为这两个对象是同一个对象。

         所以,我们在对equals方法重写之后,建议一定要对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。

  • 相关阅读:
    nginx负载均衡代理配置脚本
    想查看下编译安装的nginx默认都带有哪些模块
    docker安装mysql8.0.18
    Reached target Basic System
    layer iframe的一些操作记录:
    微信JSAPI支付
    用go和python实现在图片里藏图片
    go反射优化
    go图片灰度化
    golang 创建发送邮件服务
  • 原文地址:https://www.cnblogs.com/jiangyi-uestc/p/5679224.html
Copyright © 2011-2022 走看看