当前位置: 首页 > news >正文

【面试系列】equals和==的区别

问题:两个对象值相同(x.equals(y) == true),但是可能存在hashCode不同吗?

==的定义

比较的是两个对象的内存地址,相等则意味着内存地址一样。

对象的equals方法

Object#equals

    public boolean equals(Object obj) {return (this == obj);}

String的equals方法

判断当前对象和参数是否是同一个对象

判断当前对象和参数的字符串长度和对应字符是否相等

    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;}

JDK 中不止 String 类重写了equals 方法,还有数据类型 Integer,Long,Double,Float等基本也都重写了 equals 方法。所以我们在代码中用 Long 或者 Integer 做业务参数的时候,如果要比较它们是否相等,记得需要使用 equals 方法,而不要使用 ==

对象的HashCode

ava中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。

问题解答

  1. 使用==这个表达式判断,如果返回true,意味着两个对象的hashCode一定相同。
  2. 理论情况下,x.equals(y)==true,如果没有重写equals这个方法,这两个对象的内存地址是是相同的,也就意味着hashCode必然也相等。但可能出现重写equals的方法的情况
public class App 
{public static void main( String[] args ) {A a = new A();B b = new B();System.out.println(a.equals(b));System.out.println(a.hashCode() + "," + b.hashCode());}
}
class A {@Overridepublic boolean equals(Object obj) {return true;}
}class B {
}
  1. hashCode相等,equals方法是不一定相等的。因为HashMap映射的HashCode可能相同,但是euqals判断不一样,会在链表中添加元素。
  2. 如果重写了equals方法,没有重写HashCode,当前对象作为主键插入HashMap中,以另一个判断equals为true的对象作为主键获取对象,是获取不到的。
  3. 在实际开发中,必须遵循重写equals方法的同时也需要重写hashCode方法这一原则

在这里插入图片描述

相关文章:

【面试系列】equals和==的区别

问题:两个对象值相同(x.equals(y) true),但是可能存在hashCode不同吗? 的定义 比较的是两个对象的内存地址,相等则意味着内存地址一样。 对象的equals方法 Object#equals public boolean equals(Object obj) {return (this obj);}Stri…...

存在重复元素模块-三道题

文章目录存在重复元素217. 存在重复元素219. 存在重复元素 II220. 存在重复元素 III (SortedList二分)小结存在重复元素 217. 存在重复元素 题目链接:217. 存在重复元素 题目大意:给你一个整数数组 nums 。如果任一值在数组中出…...

3种方法删除7-Zip压缩包的密码

7-Zip压缩软件是一款完全免费且开源的软件,不仅能压缩和解压7-Zip压缩包,还能给压缩包设置打开密码。 有些小伙伴可能会遇到这样的问题,7-Zip压缩包设置密码后,过了一段时间不需要密码保护了,或者一不小心忘记了密码&…...

Codeforces Round 855 (Div. 3)(A~F)

A. Is It a Cat?定义满足条件的字符串为:其中仅可能含有meow四种字母的大小写,而且相同种类的字母必须挨在一起,四种字母的顺序必须按照meow排列。给出一个字母串,求是否满足条件。思路:感觉是个很麻烦的模拟。首先把…...

【SpringCloud】SpringCloud详解之Feign实战

目录前言SpringCloud Feign远程服务调用一.需求二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用(order服务内编写)四.使用Feign远程调用(order服务内配置)五.自定义Feign配置(order服务内配置)六.Feign配置日志(oder服务内配置)七.Feign调优(order服务内配置)八.抽…...

tuts4you上lena‘s40个crackme(1)

本来是不打算写文章了,因为懒,想以后通过录屏的形式保存一下自己学的路程。但奈何开学后一直没找到机会,在宿舍也不愿意大吼大叫的讲东西,只好再写写文章了 最近学了一些汇编语言和逆向工程,所以就想通过这40给题目来看…...

研讨会回顾 | Perforce版本控制工具Helix Core入华十年,携手龙智赋能企业大规模研发

2023年2月28日,龙智联合全球领先的数字资产管理工具厂商Perforce共同举办Perforce on Tour网络研讨会,主题为“赋能‘大’研发,助力‘快’交付”。 作为Perforce Helix Core产品在中国地区的唯一授权合作伙伴,龙智董事长何明女士为…...

C++ vscode 开发环境搭建

C vscode 开发环境搭建 笔记内容: C vscode 开发环境搭建准备了解g命令编译调试掌握使用launch.json和tasks.json配置文件编译调试了解使用cmake构建 git: https://github.com/weichangk/hellocpp/tree/master/vscodecmakecpp 环境搭建准备 安装vscode安装qt&a…...

ANR系列(二)——ANR监听方案之SyncBarrier

前言 在项目中经常遇到了手机假死问题,无规律的偶现问题,大量频繁随机操作后,便会出现假死,整个应用无法操作,不会响应事件,会发生各种奇怪的ANR,且trace不固定。而SyncBarrier是其中的罪魁祸首…...

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit),安装完成之后运行一点毛病都没有,可是过了两三个月,再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框,如下图示 出现这个问题我就上网查找,无非…...

.NET基础加强第二课--静态成员,静态类

类 实例类 默认是实例类 静态类 在类前加上static ,就是静态类 静态类中,所有包含的成员必须是静态成员 实例成员是属于具体某个对象的 举例代码 Person p1 new Person(); p1.Age 20; p1.Name “张三”; class Person { public string Name { get; set;…...

【UML+OOPC嵌入式C语言开发】使用C语言实现一个面向对象语言才能够实现的类

文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例(前面两部分有点无聊,如果大家没兴趣看可以直接从知识讲解开始看) 简述OOPC oopc,是一种轻量级的面向对象的C语言编程框架, LW_OOPC是Light-Weight …...

软件测试自动化Java篇【Selenium+Junit 5】

文章目录Selenium环境部署自动化测试例子常见的元素操作窗口等待浏览器的操作弹窗选择器执行脚本文件上传浏览器参数Junit 5导入依赖Junit 4 和 Junit5 注解对比断言测试顺序参数化单参数多参数动态参数测试套件指定类来运行测试用例指定包名来运行包下测试用例Selenium 为什么…...

Clip:学习笔记

Clip 文章目录Clip前言一、原理1.1 摘要1.2 引言1.3 方法1.4 实验1.4.1 zero-shot Transfer1.4.2 PROMPT ENGINEERING AND ENSEMBLING1.5 局限性二、总结前言 阅读论文: Learning Transferable Visual Models From Natural Language Supervision CLIP 论文逐段精读…...

STM32CubexMX与FreeRTOS学习

目录 LED与EXTI配置 基本定时器使用 软件定时器 在HAL库中实现printf 重点--记得自己添加头文件 队列实现 二值信号量实现 计数信号量实现 DMA实现 ADC配置 RTC配置 看门狗 窗口看门狗 FreeRTOS结合MX软件开发,基础配置直接生成,我们只…...

Master Slave 主从同步错误 Slave_IO_Running:NO/Slave_SQL_Running: No

Master Slave 主从同步错误 Slave_IO_Running:NO Slave_SQL_Running:Yes #在Slave库上查看状态 mysql> show slave status\G Slave_IO_Running: No Slave_SQL_Running: Yes #重启master库:service mysqld restart mysql> show master status; ------------…...

JavaScript函数之prototype原型和原型链

文章目录1. 原型2. 显式和隐式原型3. 原型链3.1 访问顺序4. instanceof4.1 如何判断1. 原型 函数的prototype属性 每个函数都有一个prototype属性,它默认指向一个Object空对象(即:原型对象)。原型对象中有一个属性constructor&a…...

从上海分时电价机制调整看转供电用户电能计费

安科瑞 耿敏花2022年12月16日,上海市发改委发布《关于进一步完善我市分时电价机制有关事项的通知》(沪发改价管〔2022〕50号)。通知明确上海分时电价机制,一般工商业及其他两部制、大工业两部制用电夏季(7、8、9月)和冬季&#xf…...

TypeScript类型体操:获取数组中元素对象属性的值作为新类型

title: TypeScript类型体操:获取数组中元素对象属性的值作为新类型 date: 2023-03-03 20:58:24 categories: TypeScript类型体操 tags: TypeScript类型体操TypeScript 首先先说获取数组中元素对象属性的值作为新类型的解决方案 使用 as const 强调不可变数组使用 …...

npm,yarn和pnpm

npm扁平的node_modules结构比如项目依赖了A 和 C,而 A 和 C 依赖了不同版本的 B1.0 和 B2.0,D也依赖B1.0, node_modules 结构如下:node_modules ├── A1.0.0 ├── B1.0.0 └── C1.0.0└── node_modules└── B2.0.0C依赖的B2.0因为版…...

工程定制丙级管道井门 物业机房通用款式

工程定制丙级管道井门,作为高层住宅、商业楼宇、物业机房强弱电井的专用消防配套设施,严格遵循国标消防规范生产,是建筑管井防火分隔、安全防护的核心产品。这款丙级管道井门采用钢制一体成型工艺,结构扎实不易变形,具…...

Paperless-ngx终极指南:如何打造智能文档管理系统的完整解决方案

Paperless-ngx终极指南:如何打造智能文档管理系统的完整解决方案 【免费下载链接】paperless-ngx A community-supported supercharged document management system: scan, index and archive all your documents 项目地址: https://gitcode.com/GitHub_Trending/…...

现代安全监控系统构建指南:从IPVS架构到智能分析实战

1. 项目概述:从“想要”到“拥有”,安全监控系统的核心价值“安华高科技给你想要的安全监控系统!”——这个标题听起来像是一句承诺,但背后其实是一个复杂的系统工程。作为一名在安防行业摸爬滚打了十几年的从业者,我见…...

STM32CubeMX配置I2C驱动ADS1115,从零开始实现高精度电压采集(附完整工程源码)

STM32CubeMX配置I2C驱动ADS1115:从零实现工业级电压采集系统 在嵌入式开发中,高精度模拟信号采集一直是工程师面临的挑战。当我们需要测量微弱电压信号或实现多通道同步采集时,STM32内置ADC往往难以满足精度要求。本文将手把手教你使用STM32C…...

手把手教你移植μGUI到STM32F103:一个文件搞定单片机图形界面

从零构建STM32图形界面:μGUI移植实战指南 在嵌入式开发中,图形用户界面(GUI)的实现往往令人望而生畏。市面上虽然有诸多成熟的GUI解决方案,但对于资源有限的STM32F103系列单片机来说,轻量级的μGUI无疑是一个理想选择。本文将带…...

如何用memtest_vulkan快速检测GPU显存稳定性:终极免费测试指南

如何用memtest_vulkan快速检测GPU显存稳定性:终极免费测试指南 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 当你的游戏突然崩溃、AI训练意外中断…...

书匠策AI官网www.shujiangce.com|论文写作“裸奔时代“结束了!

哈喽各位还在跟论文死磕的朋友们,我是你们的论文科普搭子。 今天咱们换个玩法——不讲理论,不说大道理,我就拿书匠策AI( 官网直达:www.shujiangce.com) 的期刊论文功能当一台"时光机"&#xff0…...

魔百和CM311-1A刷机后体验:S905L3A芯片+安卓9,到底能装哪些好玩的应用?

魔百和CM311-1A刷机后应用生态全攻略:释放S905L3A芯片的隐藏潜力 当你的魔百和CM311-1A成功刷入纯净安卓9系统后,这台搭载S905L3A芯片的设备便从一台普通电视盒子蜕变为开放式的娱乐中心。ADB功能默认开启的状态下,它的可能性只受限于你的想…...

给娃规划信奥路?先看懂CSP-J/S初赛分数线背后的“地域密码”(2019-2024年数据解读)

解码CSP-J/S初赛分数线:家长必知的地域竞争策略(2019-2024实战指南) 当孩子第一次接触信息学奥赛时,大多数家长都会面临相似的困惑:为什么同样的分数在A省能轻松晋级,在B省却可能止步初赛?过去…...

特斯拉Model 3车主必看:用华为随行WiFi+流量卡,低成本搞定车载WiFi(附Type-C供电方案)

特斯拉Model 3车主必看:低成本车载WiFi实战指南 特斯拉Model 3的车载娱乐系统依赖网络连接,但官方高级娱乐服务的月费让不少车主犹豫。更糟的是,部分地区的4G信号覆盖不佳,导致在线音乐、实时路况等功能形同虚设。本文将分享一套经…...