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

原文地址:https://www.cnblogs.com/rinack/p/8949887.html

时间: 2024-08-28 06:02:05

java中==和equals和hashcode的区别详解的相关文章

Java 中的 ==, equals 与 hashCode 的区别与联系

一.概述 1.概念 == : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系 equals : Object 的 实例方法,比较两个对象的content是否相同 hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数 二.关系操作符 == 1.操作数的值 基本数据类型变量 在Java中有八种基本数据类型: 浮点型:float(4 byte), double(8 byte) 整型:byt

【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例

原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例   部分代码参考http://blog.csdn.net/wangloveall/article/details/7899948 重写equals方法的目的是判断两个对象的内容(内容可以有很多,比如同时比较姓名和年龄,同时相同的才是用一个对象)是否相同 如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址

Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例

1.重写equals方法实例   部分代码参考http://blog.csdn.net/wangloveall/article/details/7899948 重写equals方法的目的是判断两个对象的内容(内容可以有很多,比如同时比较姓名和年龄,同时相同的才是用一个对象)是否相同 如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等.特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该

java中 == 和equals的使用与区别

java 的数据类型分为“基本数据类型” 和“引用数据类型”:   --->在基本数据类型的比较中,== 比的就是基本数据类型变量中所保存的值. --->在引用数据类型的比较中,== 才比较的是变量所指向的对象的地址. hashCode()返回该对象的哈希码值,该值通常是一个由该对象的内部地址转换而来的整数,它的实现主要是为了提高哈希表. 我们以引用数据类型为例,因为基本类型比较的是值,简单无须多言. 封装好的String 类型为例: (注意:ObjectL中有方法equals, hashco

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答

Java中的equals和hashCode方法

本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复.这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的h

jsp中的@include与jsp:include区别详解

1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include page="xxx.jsp"></jsp:include> 我们也许会使用这两种方式,但是也许很多人不名称这两种方式的区别.下面我们来看看下面的两个例子 2 开门见山引出问题 (1) /include/include.jsp <%@ page language=&

Java中的equals和hashCode方法详解

Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等.换

Java中的equals()和hashCode()

概述 在我们使用类集框架(比如使用hashMap.hashSet)的时候,经常会涉及到重写equals()和hashCode()这两个方法. 这两个方法的联系是: 1. 如果两个对象不同,那么他们的hashCode肯定不相等: 2. 如果两个对象的hashCode相同,那么他们也未必相等. 所以说,如果想在hashMap里面让两个不相等的对象对应同一个值,首先需要让他们的hashCode相同,其次还要让他们的equals()方法返回true,因此为了达到这个目的,我们就只能重写hashCode(