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方法。

  • 相关阅读:
    day 50 jquery之看我操作
    day 49 JavaScript中BOM和DOM
    day 43 CSS前端
    day 42 前端HTML
    day 41 mysql索引以及前端的简介
    day 40 mysql 之视图,触发器,事务,存储过程及函数
    day 39数据库mysql之多表查询
    day 38 数据库MySQL之单表查询
    day 37 数据库MySQL基本操作
    39套漂亮的后台模板
  • 原文地址:https://www.cnblogs.com/rinack/p/8949887.html
Copyright © 2011-2022 走看看