Java equals(),== 和 hashcode()
首先来看看equals() 和 "==" 的关系
1.在Java中==是用来比较两个对象的内存地址是否相同的,如果是基本类型的话将会比较其值。
2.equals()我们如果使用的是没有重新的方法的话是==是一样的,但是很多时候我们使用的都是重写了的方法。
equals()在Object类中,其源码如下,可以看出是就是使用了==:
Object equals()
public boolean equals(Object object){
return (this ==object );
}
但比如我们经常使用equals()进行字符串的比较,在String类中,其源码如下,可以看出是如何比较两个字符串的值是否相同的:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
接下来了解下hashcode()
hashcode()的作用是获取哈希码,其也是在Object类中的,JDK调用了native方法进行获取,原理就是输入任意长度都会输出固定长的一个内容,但是不同的输入可能存在相同的输出,也就时对象不同哈希可能相同,但是的哈希码不同对象一定不同,也就是产生碰撞了,如果是MD5的算法的话也是类似,但是不同的输入输出是不同的。获取的哈希码是按键值对(key,value)进行存储的。
要之何用?
我们知道Set集合具有元素唯一性的特点,但它是如何保证其唯一的呢?
我们将一个对象存入Set时,会先获取对象的哈希码,然后与Set中的对象进行比较,如果相同的就说明其内已经有这个对象了,就不添加进集合,但是如果不同的话,也并不是说没有这个对象,然后会调用equals()进行比较,如果相同的话,还是不进行添加,如此好像没有很大作用,但是其目的是提高比较的效率,减少使用equals()。
案例场景
参考:
Java equals(),== 和 hashcode()的更多相关文章
- 总结Java equals()和hashCode()的联系
Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们 ...
- java :equals()和hashcode()方法的结合使用
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- Java == ,equals 和 hashcode 的区别和联系(阿里面试)
今天阿里的人问我 equals 与hashcode的区别,我答不上来, 仔细查了一下,做了总结: (1) == 这是Java 比较内存地址,就是内存中的对象: java中的==是比较两个对象在JVM中 ...
- Java equals 和 hashCode 的这几个问题可以说明白吗?
前言 上一篇文章 如何妙用 Spring 数据绑定? ,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦 ...
- Java equals 和 hashcode 方法
问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode ...
- Java equals() 和hashCode()方法详解
Java的Object类中定义了equals方法,Object类中的equals方法源代码如下,从源代码中可以看出Object类中的equals方法是用来返回判断两个对象是否指向同一个对象(引用地址) ...
- java equals 与 hashCode
转:http://m.blog.csdn.net/blog/pengchua/2297547# 如果你为某个类写了equals方法,那么应该同时编写hashCode方法.如果没有提供hashcode方 ...
- java equals 和hashcode
1 如果不知道怎么重载hashcode, eclipse自动代码生成工具会帮助你生成,大概的思路是设定一个int prim, 然后根据各个成员的值或者hashcode值进行某种运算即可,具体什么运 ...
- java equals和hashcode方法
equals()方法比较两个对象的引用是否相同 hashcode()方法比较两个对象的哈希码是否相同
- equals()与hashCode()方法协作约定
翻译人员: 铁锚 翻译时间: 2013年11月15日 原文链接: Java equals() and hashCode() Contract 图1 Java所有对象的超类 java.lang.Obje ...
随机推荐
- 记录-记一次不规范使用key引发的惨案
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 平时在使用v-for的时候,一般会要求传入key,有没有像我一样的小伙伴,为了省心,直接传索引index,貌似也没有遇到过什么问题, ...
- 性能测试系列:Jmeter使用记录
jmeter配置环境变量vi /etc/profileexport PATH=$PATH:/tmp/jmeter/apache-jmeter-5.4.1/binsource /etc/profile ...
- Nancy如何接收POST过来的Json数据
当Nancy版本为2.0.0.0时 string postData = Request.Body.AsString; 当Nancy版本为1.4.5.0时 自己写一个扩展方法,代码如下 /// < ...
- KingbaseES 数据库逻辑优化规则
SQL 优化的过程可以分为逻辑优化和物理优化两个部分.逻辑优化主要是基于规则的优化,简称 RBO(Rule-Based Optimization).物理优化会为逻辑查询计划中的算子选择某个具体的实现, ...
- 初学 FSMC - 外扩SRAM(三)
1. FSMC相关函数 //FSMC初始化 void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); //FSMC ...
- 测试开发之系统篇-安装KVM虚拟机
虚拟机(Virtual Machine)和容器(Container)是两种流行的虚拟化技术. 虚拟机模拟机器的硬件,包括了完整的操作系统和应用,它一旦被开启,预分配给它的资源将全部被占用.容器是运行在 ...
- #trie,动态规划#洛谷 2292 [HNOI2004]L语言
题目 分析 建一棵trie,然后匹配最长前缀可以用\(dp\)做, 如果这个位置可以被匹配到那么可以从这个位置继续匹配 代码 #include <cstdio> #include < ...
- GitHub互赞快速涨星,最简单的涨星方法
各位代码们,是不是厌倦了在GitHub上孤独地刷着自己的项目页面,眼巴巴地等待那星星数的涨幅?今天给大家安利一个超级实用的新玩意儿--涨星互助平台,一个让你的GitHub项目星星数飞起来的秘密基地! ...
- OpenHarmony创新赛|赋能直播第三期
开放原子开源大赛OpenHarmony创新赛赋能直播间持续邀请众多技术专家一起分享应用开发技术知识,本期推出OpenHarmony应用开发之音视频播放器和三方库的使用和方法,助力开发者掌握多媒体应用 ...
- openGauss/MogDB 学习笔记之 -- PITR恢复
openGauss/MogDB 学习笔记之 -- PITR 恢复 概念描述 背景信息 当数据库崩溃或希望回退到数据库之前的某一状态时,MogDB 的即时恢复功能(Point-In-Time Recov ...