java学习笔记(5):equals和 == 的区别

本文深入探讨了Java中==运算符与equals方法在比较基本类型与引用类型时的不同行为,解析了String与Integer类型的equals方法如何重载,以及==与equals在比较对象时的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

1.==

(1)若==两边的变量是基本类型,则只要它们数值相等,就判断这两个变量相等,返回true。
在这里插入图片描述
输出结果:在这里插入图片描述

(2)若==两边的变量是引用变量,则 ==比较的是这两个变量的内存地址,只有它们指向同一个对象时,才会返回true。
在这里插入图片描述
输出结果:在这里插入图片描述
结果分析:非new的str1和str2返回true,而只要涉及new,就会新开辟一块内存空间来存储(因此,内存地址肯定是不同的)
这里要强调一下
String str1 = “你好”;和String str2 = “你好” 的区别
对于前者;
JVM会将“你好”存储在运行时常量池。通过这种方式将其与String对象的引用str1绑定(JVM现在运行时常量池中个寻找是否有相同的常量,若有,则将引用str1指向“你好”,若无,则在运行时常量池开辟一个空间来存储“你好”,并将引用str1指向“你好”)
对于后者:
new关键字生成对象是在堆中进行的,而在堆中进行对象生成的过程中不会检测该对象是否已存在,因此用new来创建的对象一定是一个不同的对象(即内存地址不同,但是内存地址中存放的内容可以相同)

2.equals

equals比较的是两个对象的内容,如果不重载equals方法,自动调用object的equals方法(为重载比较的是内存地址),则和“==”一样。但String和Integer,默认重载了object类的equals方法(重载后比较的是对象的内容)
(1)在String类的源码中找到equals方法
发现String中重载了equals方法,比较的是对象的内容。并且该方法传递的参数是一个Object类参数
在这里插入图片描述
(2)在Object类中找到equals方法
在这里插入图片描述
可以看到,未重载的equals方法比较的是两个对象的引用(即内存地址)
(3)对Sting类中equals方法的练习
在这里插入图片描述
输出结果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值