首先来看看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()的更多相关文章

  1. 总结Java equals()和hashCode()的联系

    Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们 ...

  2. java :equals()和hashcode()方法的结合使用

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  3. Java == ,equals 和 hashcode 的区别和联系(阿里面试)

    今天阿里的人问我 equals 与hashcode的区别,我答不上来, 仔细查了一下,做了总结: (1) == 这是Java 比较内存地址,就是内存中的对象: java中的==是比较两个对象在JVM中 ...

  4. Java equals 和 hashCode 的这几个问题可以说明白吗?

    前言 上一篇文章 如何妙用 Spring 数据绑定? ,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦 ...

  5. Java equals 和 hashcode 方法

    问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode ...

  6. Java equals() 和hashCode()方法详解

    Java的Object类中定义了equals方法,Object类中的equals方法源代码如下,从源代码中可以看出Object类中的equals方法是用来返回判断两个对象是否指向同一个对象(引用地址) ...

  7. java equals 与 hashCode

    转:http://m.blog.csdn.net/blog/pengchua/2297547# 如果你为某个类写了equals方法,那么应该同时编写hashCode方法.如果没有提供hashcode方 ...

  8. java equals 和hashcode

    1  如果不知道怎么重载hashcode, eclipse自动代码生成工具会帮助你生成,大概的思路是设定一个int prim,  然后根据各个成员的值或者hashcode值进行某种运算即可,具体什么运 ...

  9. java equals和hashcode方法

    equals()方法比较两个对象的引用是否相同 hashcode()方法比较两个对象的哈希码是否相同

  10. equals()与hashCode()方法协作约定

    翻译人员: 铁锚 翻译时间: 2013年11月15日 原文链接: Java equals() and hashCode() Contract 图1 Java所有对象的超类 java.lang.Obje ...

随机推荐

  1. 记录--基于css3写出的流光登录(注释超详细!)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 完整效果 对基本的表单样式进行设置 这里设置了基本的表单样式,外层用了div进行包裹,重点是运用了两个i元素在后期通过css样式勾画出一条 ...

  2. 《Effective Java》笔记 4~5

    4. 类和接口 15. 使类和成员的可访问性最小化 把API与实现清晰地隔离开,组件间通过API进行通信,不需要知道其他模块的内部工作情况,这称为:实现信息隐藏或封装 解耦系统中的各个组件 尽可能地使 ...

  3. Win10下安装Maven 配置环境变量 设置settings

    一.下载.设置环境变量 下载页面:https://maven.apache.org/download.cgi 下载地址:https://mirrors.tuna.tsinghua.edu.cn/apa ...

  4. HashMap集合的map.values()返回的Collection集合执行add方法报空指针问题

    一.方法1. private Collection<String> setPermissionTenant(List<SysPermission> ls, int tenant ...

  5. Generalized Focal Loss:Focal loss魔改以及预测框概率分布,保涨点 | NeurIPS 2020

    为了高效地学习准确的预测框及其分布,论文对Focal loss进行拓展,提出了能够优化连续值目标的Generalized Focal loss,包含Quality Focal loss和Distrib ...

  6. Python爬虫爬取ECVA论文标题、作者、链接

    1 import re 2 import requests 3 from bs4 import BeautifulSoup 4 import lxml 5 import traceback 6 imp ...

  7. #NIM游戏#CodeChef A Game With a Sheet of Paper

    SHGAME 分析 可以发现每次相当于去掉上下左右的若干行列,也就是 \(x-1,n-1-x,y-1,m-1-y\) 题目就转换成了取石子的问题,先手必胜当且仅当 \((x-1)\) xor \((n ...

  8. npm 直接安装 GitHub/GitLab 仓库代码及 npm link 本地调试

    一.npm 直接安装 GitHub/GitLab 仓库代码 语法 npm install <git remote url> 示例 命令: npm i git@github.com:maze ...

  9. OpenHarmony使用ArkUI Inspector分析布局

      本文转载自<#2023 盲盒+码 # OpenHarmony使用ArkUI Inspector分析布局>,作者:zhushangyuan_ OpenHarmony使用ArkUI Ins ...

  10. 如何利用OpenHarmony ArkUI的Canvas组件实现涂鸦功能?

    简介 ArkUI是一套UI开发框架,提供了开发者进行应用UI开发时所需具备的能力.随着OpenAtom OpenHarmony(以下简称"OpenHarmony")不断更新迭代,A ...