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

    一、相同点

    都是用来进行值或对象的比较。

    二、不同点

    对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相等的,对于引用对象,对比的是引用的对象的堆地址,例如:

    public class Main {
       public static void main(String[] args) throws InterruptedException {
         Object obj1 = new Object();
         Object obj2 = new Object();
         System.out.println(obj1 == obj2);
       }
    }

    注意对于包装类例如Integer而言,有一些特殊。

    对于equals()方法,该方法是Object类的方法,对比时,默认对比的也是引用对象指向的内存地址,所以一般跟“==”对比的值是相同的,因为java不支持对操作运算符重载,如果我想要两个对象相等,那么就必须重写equals方法。对于String类型,已经重写了该方法,所以用equals对比字符串时是相等的。

    对于hashcode()方法,HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的。例如hashMap就是利用hashcode来计算存入哪一个entry的。RocketMQ中索引的计算也利用到了hashcode,对于hashcode()和equals(),有:

    两个对象的hashcode相同,对象不一定是一个对象。

    两个对象的hashcode不同,那么一定不是同一个hash对象。

    如果两个对象的equals相同,那么hashcode一定相同。

    对于equals和hashcode,如果重写了equals方法,那么也尽量重写hashcode方法。

  • 相关阅读:
    一个好用的H5tab切换(抽屉功能)
    jQuery的ajax请求
    原生js的ajax请求
    微信小程序封装get、post请求
    微信小程序 data数据的赋值和取值
    gitLab更新文件命令
    vue中localStorage的使用
    linux就该这么学--课程第15天
    linux就该这么学--课程第14天
    linux就该这么学--课程第13天
  • 原文地址:https://www.cnblogs.com/rinack/p/8949887.html
Copyright © 2011-2022 走看看