Java 解惑:equals 与 == 的区别

深入理解Java基础:String中equals与==的区别解析 字符串常量池是Java中的一个重要特性,它能够显著提高字符串操作的性能并减少内存的使用。intern()方法作为字符串常量池的关键接口,提供了灵活的字符串引用管理能力。掌握字符串常量池的工作原理及其与intern()方法的交互,对于优化Java应用性能至关重要。然而,开发者需要谨慎使用这些特性,以免引起不必要的性能问题。通过适当的测试和分析,可以确保字符串常量池的使用为应用带来正向的性能影响。方法的引入,为 Java 开发者提供了一个既简洁又安全的比较对象的方式。 阅读详情

对这个问题,如果要回答的全面的话,我们应该这么讲:

  1. 当参与 == 比较的两个元素中有一个是值类型的,那么就按照值类型来比较。而引用类型按照值来比较的时候使用的是它们的 hashCode() 的返回结果。只有当参与比较的两个元素都是引用类型的,那么才按照引用类型来比较,即比较它们的 hashCode() 的返回结果。
  2. 当使用 equals() 方法进行比较的时候,实际的比较结果取决于 equals()方法的具体实现,在 Object 的默认实现中,是使用==来实现的。也就是说使用了按引用来比较的方式。不过,比如 Integer 和 String 等,它们在自己的类中又实现了该方法,而它们实现该方法的时候是按照值来进行比较的。
  3. 另外就是关于覆写 equals() 和 hashCode() 方法的问题,覆写它们要遵循一定的原则,不过这些工作完全可以由 IDEA 代劳。

验证代码

	    public static void main(String...args) {
	        Integer integer = new Integer(2);
	        int hash = integer.hashCode();
	
	        // case1:结果为true,说明当参与==比较的两个中有一个是基本类型,就按照基本类型来比较
	        System.out.println(hash == integer);
	
	        Integer integer1 = new Integer(2);
	        // case2:结果为false,说明是按照两个对象的引用来比较的
	        System.out.println(integer == integer1);
	        // Case3:结果为true,说明是使用equals方法进行比较的,而equals是用了它们的值来比较
	        System.out.println(integer.equals(integer1));
	
	        MyObj myObj = new MyObj(2);
	        MyObj myObj1 = new MyObj(2);
	        // case4:比较结果为false,说明是按照两个对象的引用来比较的
	        System.out.println(myObj == myObj1);
	        // case5:比较结果为false,因为用了Object的equals方法实现,而该方法实现中使用==比较的
	        System.out.println(myObj.equals(myObj1));
	    }

	    private static class MyObj {
	        private int o;

	        public MyObj(int o) {
	            this.o = o;
	        }
	    }

输出结果:

true
false
true
false
false
Gazebo仿真UUV水下机器人:从环境搭建到避障算法实战 本文详细介绍了使用Gazebo仿真平台进行UUV水下机器人开发的全流程,涵盖从环境搭建、uuv_simulator配置、传感器集成到核心避障算法实战。通过搭建水下仿真实验室并实现基于激光雷达数据的反应式避障算法,为水下机器人算法验证与开发提供了高效、低成本的解决方案。 阅读详情

相关推荐

BBR算法原理与实现深度解析

BBR算法通过重新定义拥塞控制的基本范式,为现代网络应用提供了突破性的解决方案。随着QUIC协议的普及和智能网卡技术的发展,BBR类算法将在边缘计算、云游戏、工业物联网等领域发挥更重要的作用。

程序猿老樊的博客 2415

Java基础:==与equals()的区别

Java基础篇:详细讲述了Java中==和equals()的不同之处

PeaK欢迎大家评论留言,一起交流Java技术 7789

别再死磕USB HID了!用ESP32的Arduino框架手把手教你实现蓝牙鼠标键盘(附完整代码)

本文详细介绍了如何使用ESP32的Arduino框架实现蓝牙HID设备,包括鼠标和键盘的快速开发。通过现成的库和示例代码,开发者可以轻松打造自定义蓝牙外设,无需复杂的USB HID协议栈,适用于演示控制器、宏键盘等多种场景。

weixin_31309419的博客 260

Java面试常见题:==与equals的区别

本文深入解析了Java中==与equals()的区别及常见陷阱。==比较基本类型的值或引用类型的对象地址;equals()默认与==相同,但可被重写为值比较。重点剖析了String(常量池)、Integer(缓存机制)、BigDecimal(精度比较)等特殊场景的差异,并提醒注意null安全问题和equals方法的规范要求。文章通过代码示例直观展示不同场景下的比较结果,帮助开发者避免常见错误,最后总结面试要点:==判断"是否同一对象",equals()判断"是否逻辑相等&quo

2401_83440791的博客 419

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1176

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战

本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。

weixin_27791839的博客 387

Java必知:==与equals的区别详解

Java中Object类的equals方法默认使用"=="比较对象引用,而Integer、String等类通常重写equals方法实现值比较。自定义类时,可以重写equals方法进行属性值比较而非引用比较,如Person类重写equals比较name和age属性。因此,==用于比较引用,equals用于比较值(需重写equals方法)。

Sgfcgg的博客 258

SAP WM模块事务码(TCODE)大全

OL07 Data transfer stor.bins LDK34->RLPLA 仓储位LDK34 ->RLPLA

matinal 當冬夜漸暖 。公众号:matinal 5844

java:==与equals的区别

摘要:本文比较了Java中"=="和equals的区别。"=="用于基本类型的数值比较和对象的内存地址比较;equals是Object类的方法,默认行为与"=="相同,但可通过重写实现自定义比较逻辑。String类重写了equals方法实现内容比较。基本类型不能直接与对象比较,但可通过自动装箱/拆箱与包装类比较。示例代码展示了基本类型、对象和字符串的比较结果,验证了二者的差异。

2302_81095897的博客 379

光谱特征选择之模拟退火算法SA

光谱特征选择之模拟退火算法SA。

weixin_42621095的博客 901

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2239

Java基础:equals()方法与==的区别

euqals和==区别介绍

愿你我都能实现自己的梦想 1356

Selenium|通过更改亚马逊amazon的配送地获取当地的cookie

如果我们需要拿到国外配送地的商品信息,这个时候就需要用到selenium或者pypputeer自动化的方法去更改配送地,拿到当地的cookie信息,之后,携带当地的cookie使用requests发送请求,就可以拿到国外配送地的商品数据信息。一般来说,我们访问亚马逊,亚马逊的配送地一般显示的是国内,但是国内的商品信息和国外的商品信息其实是存在很大差别的,比如你在搜索框输入某个关键词,看到的

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 991

JAVA基础:equals 与 == 的区别

区别: “==” 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致。 如果两个对象的引用相同时(指向同一对象时),“==”操作符返回true,否则返回flase。 注:如果有对内存分配及变量存储位置(堆、栈、方法区常量池、方法区静态区)感兴趣的可以去看看这篇博客,里面写的很详细。对我还在学基础的人来说帮助很大,理解了很多内容,还有待消化。...

畅志聪的专栏 251

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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...

再述:Java中==与equals的区别

package sun; public class Test { public static void main(String[] args) { Student student = new Student(); System.out.println(student);//直接输出对象时,输出的是对象toString方法返回值结果 student.setAge(-10); ...

核桃仁先生的博客 341

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

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

详述:Java中 String equals与==区别

详述:Java中 String equals与==区别 public class Test { public static void main(String[] args) { int a = 12; int b = 12; System.out.println(12==12); System.out.println(a==b); Test t1 = new Te...

核桃仁先生的博客 260

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

equals和==的区别_Java基础(一):==和equals()的区别

先说本质,==和equals()最大的区别:就在于==是一个运算符,equals()是一个方法。一、对==符号的理解==可以对不同类型数据进行操作,其中包括:基本数据类型:(byte、short、int、long、float、double、boolean、char)引用数据类型:基本数据包装类(Byte、Short、Integer、Long、Float、Double、Boolean、Charact...

weixin_32334209的博客 333

JAVA:==和equals的区别

==和equals的区别 == 基本数据类型==比较的是值 引用数据类型==比较的是对象的内存地址 equals() 不能用于判断基本数据类型的变量,只能判断两个对象是否相等。 equals()方法存放于Object类中,而Object类是所有类的间接或直接父类 Object类equals()方法: public boolean equals(Object obj){ return(this == obj); } equals()方法存在两种使用情况: 类没有覆盖equals(

第507颗水果星球 151

Java之路:==与equals()的区别

关系运算符 == 【示例1】 public class Equal { public static void main(String[] args) { int m = 3; int n = 3; Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(m == n); ...

星云999的博客 229

Java基础篇:equals()方法与==的区别

目录: 一、equals()方法与 “=="号 的区别: 1、超类Object的equals()底层原理: 2、equals()与"==" 的区别: 3、equals()的重写规则: 4、有关equals()与 == 号的小例子: 二、equals()与hashCode()方法: 1、认识HashCode()方法: 2、equals()与hashCode()的联系: 3、hash...

张维鹏的博客 6346

Java基础知识:==和equals的区别

无论是在面试或者在工作中,==和equals是我们始终无法避免的两个基本使用,但是,==和equals又是不同的,一旦用错了,那么程序就会出现错误,但是排查的时候又很难发现。 我们都知道,Java中有8种基本的数据类型,分别是:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储数

AI菜鸡,NLP领域,至今为发不出论文掉头发 278

Java面试:Java中==与equals的区别

“==”比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否相同。(引用类型) 如果两个对象的引用指向同一内存空间,“==”操作符返回true,否则返回flase。 public class Test { public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; System.out.printl

qq_40378795的博客 194

java : equals()和 == 的 联系与区别

1、equals()和 == 的 联系与区别 2、实例

weixin_48691584的博客 298

java:equals和 == 的区别

equals和 == 的区别 总结来说: 1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址 2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 诸如String、Date等类对equals方法进行了重写的...

金霖海的博客 203

面试必问一:Java 中 == 和 equals 的区别你知道吗

面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本类型比较,equals 是对象比较,不懂 hashCode,想起来简直惨不忍睹。于是找了一点小时间,研究了一番整理成文章供大家参考。 == 是什么? 在《java核心技术卷 1》中将==归类于关系运...

weixin_34152820的博客 261
上一篇: 设计模式--面向对象设计原则、UML
下一篇: 设计模式-4:单例模式
开发者如是说
博客等级 码龄10年 67粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值