java中==和equals和hashcode的区别详解

Posted rinack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法。

以上是关于java中==和equals和hashcode的区别详解的主要内容,如果未能解决你的问题,请参考以下文章

java里equals和hashCode之间啥关系

Java中关于equals()和hashCode()的问题

Java中equals和hashcode的区别?

java 集合中重写hashCode方法和重写equals方法啥关系?

从语言设计的角度探究Java中hashCode()和equals()的关系

java中hashcode和equals这两个方法的用法?