Java面试题-两个对象相等equals相等吗,equals相等对象相等吗

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质 简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。 阅读详情

这是一个非常经典的Java面试题,它核心考察的是你对对象相等性判断的深入理解。简单来说,这

两个说法并不总是成立,关键在于如何定义“相等”。

下面这个表格清晰地展示了它们的关系:

情形

两个对象相等 (内存地址相同)

equals方法返回 true

说明

​​默认情况 (未重写 equals)​​

✅ 意味着 equals为 true

❌ ​​不意味着​​ 对象相等

此时 equals等价于 ==,比较内存地址。

​​重写 equals后​​

❌ ​​不意味着​​ equals为 true

✅ 意味着 被​​逻辑上​​认为是相等的

此时 equals比较的是对象内容(如字段值)。


⚖️ 深入解析相等性

1. “两个对象相等” 是否意味着 equals为 true?

这里的“对象相等”通常指​​两个引用指向同一个内存对象​​(即使用 ==比较为 true)。

  • ​​结论:是的,必然为 true。​​

  • ​​原因​​:根据 equals方法的约定,其实现必须满足​​自反性​​(x.equals(x)为 true)。如果一个引用和它自己比较都不相等,那就违反了最基本的原则。即使在重写的 equals方法中,第一行检查也通常是 if (this == obj) return true;,用于优化性能。

2. equals为 true是否意味着“两个对象相等”?

这里的“对象相等”指​​两个引用指向同一个内存对象​​。

  • ​​结论:不一定。​​

  • ​​原因​​:当我们重写 equals方法后,它比较的不再是内存地址,而是对象的​​逻辑内容​​。例如,两个不同的 String对象 new String("abc"),它们位于内存的不同位置(==比较为 false),但因为字符序列完全相同,equals比较会返回 true。在这种情况下,我们说它们在逻辑上是相等的,但不是同一个对象。

🔗 equals与 hashCode的黄金法则

这是一个​​至关重要​​的关联规则:​​当你重写了 equals方法,你必须同时重写 hashCode方法​​。

  • ​​规则​​:如果两个对象根据 equals方法是相等的,那么调用它们的 hashCode方法必须产生相同的整数结果。

  • ​​为何重要​​:这条规则主要是为了保障基于哈希表的集合类(如 HashMap, HashSet, Hashtable)能正常工作。这些集合依赖 hashCode来快速定位对象。

  • ​​违反后果​​:如果两个对象 equals相等但 hashCode不相等,它们可能会被插入到哈希表的不同位置,导致你无法正常地从集合中检索到该对象,甚至可能使集合中存在重复元素(违反 Set的唯一性)。

💡 面试进阶要点

  1. ​​equals的五大原则​​:

    • ​​自反性​​:x.equals(x)必须返回 true。

    • ​​对称性​​:如果 x.equals(y)为 true,那么 y.equals(x)也必须为 true。

    • ​​传递性​​:如果 x.equals(y)为 true,且 y.equals(z)为 true,那么 x.equals(z)也必须为 true。

    • ​​一致性​​:只要对象没有被修改,多次调用 x.equals(y)应该始终返回相同的结果。

    • ​​非空性​​:对任何非 null的 x,x.equals(null)必须返回 false。

  2. ​​==与 equals的根本区别​​:

    • ==:对于基本类型,比较的是​​值​​;对于引用类型,比较的是​​内存地址​​。

    • equals:默认行为与 ==相同,但可以被重写用于比较对象的​​逻辑内容​​。

  3. ​​重写 equals和 hashCode的最佳实践​​:

    • 使用 IDE 或 java.util.Objects类的 equals和 hash方法来安全、简洁地实现。

    • 确保在 hashCode计算中使用所有在 equals比较中使用的“关键域”。

btstack ble ota开发笔记(2)-mcuboot移植 紧接上一篇文章,要实现一个完整的ota demo,除了实现ota image的传输通道外,还需要“bootloader”这个角色来帮我们实现ota image的校验、安全、引导以及启动,这里我选择开源的组件mcuboot,下面开始介绍mcuboot在stm32f4-discovery上的移植。首先估算下bootloader & application image的大小,确定好flash的分布情况,因为后续会涉及到flash的操作(读、写、擦除),为了方便程序的编写,各个image area在flash中的起 阅读详情

相关推荐

CCS8.1 导入CCS3.3工程方法

    CCS3.3作为开发人员使用最广开发工具,研究人员手上存在不少该版本的建立的程序版本,然而随着TI公司推出高级版本的CCS平台,在新的平台上集成了更加丰富的功能和优点。利用新版本的平台在开发和编译旧版本工程上可以节省大量时间和精力。在使用新版本开发3.3版本工程时,首要解决的就是加载3.3的工程文件,现将加载过程记录如下: 第一步:Project->Import Legacy CC...

1万+

Java中的equals方法详解:比较方法

如果不覆盖equals方法,则调用该方法时会使用继承的Object类的实现,这种默认实现无法提供正确的比较行为,因为它无法知道哪些属性或状态在两个对象中是必须相同的。在这个例子中,a和b是两个不同的Integer对象,虽然它们的值相同,但是它们指向的是不同的对象,因此使用==运算符比较时返回false。3)传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回true,y.equals(z)也返回true,那么x.equals(z)也应该返回true;

weixin_62458944的博客 1万+

手把手教你:基于STM32H7自制飞控,如何从零开始移植PX4固件(附避坑指南)

本文详细介绍了如何基于STM32H7自制飞控板并移植PX4固件的完整流程,包括硬件设计、开发环境搭建、关键配置文件移植、驱动开发与适配等关键步骤。特别针对PX4-AutoPilot的移植过程提供了实用技巧和避坑指南,帮助开发者高效完成飞控系统开发。

weixin_30271335的博客 143

两个对象相等(==、equals、hashCode)详解

一文让你彻底明白 == 与 equals 的区别,hashCode 到底是啥,hashCode 又和 equals 有怎样的关系

m0_54355172的博客 3444

ZYNQ新手必看:你的PS端DDR和QSPI配置真的对了吗?从原理到实操的避雷指南

本文深入解析ZYNQ PS端外设配置的关键要点,特别是DDR匹配和QSPI时钟优化的实战技巧。通过详细案例和配置清单,帮助开发者避免常见错误,确保系统稳定性和启动可靠性。适合ZYNQ新手和需要优化最小系统的开发者参考。

weixin_28675839的博客 447

基于拟蒙特卡洛模拟法的随机潮流计算matlab程序

由式(4-11)可知,蒙特卡洛模拟法的计算量不受电力系统规模大小影响,因此该方法在一些复杂的电力系统中可以得到应用,包括处理电力系统中有多个间歇性新能源接入的问题,解决系统中多个节点之间相关性问题等等。本章在此基础上提出了基于拟蒙特卡洛模拟的随机潮流计算方法,并且对拟蒙特卡洛法中的拟随机数序列进行了改进,大大提高了随机潮流的计算效率。模拟法的具体思路如下:基于实际工程问题的求解需要,建立与之相对应的随机模拟过程和随机概率模型,使得它们的参数,包括概率分布或者数学期望,能够等于问题的实际解;

weixin_47365903的博客 1797

==与equals与hashCode

==与equals == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。 equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况 1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。 情况 2:类覆盖...

weixin_44521516的博客 165

【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 4万+

java 判断 and_Java中如何判断两个对象是否相等(Java equals and ==)

本文地址:https://www.dutycode.com/post-140.html除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。如何判断两个对象相等,这个问题实际上可以看做是如何对equals方法和hashcode方法的理解。从以下几个点来理解equals和hashCode方法:1、equals的作用及与==的区别。2、hashcode的作用及...

weixin_39807691的博客 300

华为od 面试手撕代码题【完成任务最少小时】

华为od 面试手撕代码题【完成任务最少小时】

MISAYAONE的博客 1583

电磁场仿真软件:Sonnet_(12).Sonnet与其他软件的集成

Sonnet作为电磁场仿真领域的强大工具,不仅能够独立完成复杂的仿真任务,还可以通过与其他软件的集成,实现更高效的工作流程和更广泛的功能扩展。通过与CAD、EDA、数据处理软件、MATLAB、Python以及云计算平台的集成,Sonnet用户可以更好地利用现有设计资源,进行参数优化和结果分析,从而提升设计和仿真效率。希望本节的内容能够帮助你更好地理解和应用Sonnet的集成功能。

kkchenjj的博客 1432

equals如何判断两个对象相等,为什么整型包装类要求使用equals比较

equals判断两个对象相等,为什么整型要用equals比较

weixin_43735471的博客 1523

微波技术仿真:微波谐振器分析_(2).微波谐振器理论

谐振器是一种能够在特定频率范围内存储和释放电磁能量的器件。在微波频段,谐振器通常用于滤波、频率选择和能量存储等应用。一个理想的谐振器在谐振频率下能够存储无限大的能量,但在实际应用中,由于损耗的存在,谐振器的性能会受到一定限制。微波谐振器在微波通信、雷达系统、微波测量和微波电路设计等领域中发挥着重要作用。谐振器的设计需要考虑多个因素,包括谐振频率的精确控制、损耗的最小化、频率稳定性的提高和小型化设计。通过理论分析和仿真工具的使用,可以有效优化谐振器的性能,满足实际应用的需求。

2401_87715305的博客 935

Java常考面试题6 equals相同的对象对于的hashCode是否相等?

equals和hashcode的关系

HZ_LIZX的博客 6605

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

面试题:两个对象的 hashCode()相同,则 equals()也一定为 true吗?

@[TOC](面试题:两个对象的 hashCode()相同,则 equals()也一定为 true吗?) 面试题:两个对象的 hashCode()相同,则 equals()也一定为 true吗? 题目分析 Java常规知识了解,在Object类的hashCode方法和equals方法的注释上有相关介绍。 题目回答 两个对象的hashCode相同,equals方法不一定需要为true。在Object的hashCode方法写了hashCode的几个约定,其中就有一条表示,equals方法返回false,不代表h

匿迹 1199

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java基础面试题: 面向对象(克隆、值传递、Java包)

收集大量Java经典面试题目,内容涵盖了包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 等知识点。适合准备Java面试的读者参考和复习。

m0_46013789的博客 1372

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

赵侠客 2525

【Java面试题】说说hashCode() 和 equals() 之间的关系?

上一篇关于介绍时,提到equals()和hashCode()方法可能引出关于的面试题,本篇来解析一下这道基础面试题。先祭一张图,可以思考一下为什么?equals()的作用是用来判断两个对象是否相等。hashCode()的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。我们以“类的用途”来将“hashCode() 和 equals()的关系”分2种情况来说明。

2301_77690238的博客 817

Java 中的 hashCode () 与 equals () 核心原理、契约规范、重写实践与面试全解

本文是Java数据结构学习笔记系列,涵盖JAVA初阶到数据结构核心内容,包括集合、泛型、List、ArrayList、LinkedList、栈、队列、二叉树、堆等专题。重点解析了Object类中equals()和hashCode()方法的定义、实现、区别及使用规范,强调重写equals()必须同时重写hashCode()的重要性。通过HashMap源码分析,展示了这两个方法在哈希集合中的关键作用,并提供标准重写模板和IDEA生成技巧。

HRDMN的博客 428

深入理解 equals() 方法以及与 == 的区别

各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!36)][外链图片转存中…(img-04fJ7K6B-1712485292936)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

2401_84047990的博客 472

两个对象值同样(x.equals(y) == true),但却可有不同的hash code,这句话对不正确?

1.网上面试题 这是一道Java面试题。看了非常多答案都说不正确。能够看下面代码。就知道结果了 http://www.iteye.com/topic/485046第45题 答案是错误的 package com.test; public class Main { public static void main(String[] args) { // TODO Auto-g...

weixin_30590285的博客 81

安卓给string对象赋值_5 个刁钻的 String 面试题,看完这篇,会让你焕然大悟

优质文章,及时送达这篇来看看关于Java String类的5道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,学完了这篇,我才焕然大悟,才知道为什么是这个答案,本篇就带你了解这些题的答案为什么是这样。1.判定定义为String类型的st1和st2是否相等,为什么package string;public class Demo2_String {public static void main...

weixin_39783633的博客 184

hashCode()与equals()方法之间千丝万缕的关系

前言 hashCode()与equals() 是java面试中经常被问道的问题,可能会被问道 “你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ,因此我们需要彻底弄清楚这2个方法的关联关系。 hashCode()方法介绍 hashCode()的作用是获取哈希码,也称为散列码,它实际上是返回一个int整数,这个hash码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都

KevinChen2019的博客 331

Java字符串篇-3-String类5个常见面试题的解答过程和原理

a”,”b”,”c”三个本来就是字符串常量,进行+符号拼接之后变成了“abc”,“abc”本身就是字符串常量(Java中有常量优化机制),所以常量池立马会创建一个“abc”的字符串常量对象,在进行st2=”abc”,这个时候,常量池存在“abc”,所以不再创建。上面的答案第一个是false,第二个是true,第二个是true我们很好理解,因为比较一个是“abc”,另外一个是拼接得到的“abc”,所以equals比较,这个是输出true,我们很好理解。换句话说,新创建的字符串是该参数字符串的副本。

web15085096641的博客 789

c++ string 拼接_5 个刁钻的 String 面试题,看完这篇,会让你焕然大悟

优质文章,及时送达这篇来看看关于Java String类的5道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,学完了这篇,我才焕然大悟,才知道为什么是这个答案,本篇就带你了解这些题的答案为什么是这样。1.判定定义为String类型的st1和st2是否相等,为什么package string;public class Demo2_String {public static void main...

weixin_39845039的博客 546

五个刁钻的String面试问题及解答

往期热门文章:1、IntelliJ平台将完全停止使用Log4j2、神操作!我把 3000 行代码重构成 15 行!3、我用Java几分钟处理完30亿个数据...4、一款自动生成单元测试的 IDEA 插件5、微软 10 大最受欢迎 GitHub 项目,最高 Star 数量 13 万来源:blog.youkuaiyun.com/u011541946/article/details/798...

Java之间 126
上一篇: MAC-Java集合求差集,如果B集合中的id在A集合中存在就移除,如果不在就返回A集合
下一篇: Java应用中,CPU 使用率过高​问题排查(手动用top+jstack或阿里Arthas)
ZHOU_VIP
博客等级 码龄11年 1万+粉丝 1779原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值