网易首页 > 网易号 > 正文 申请入驻

面试官问:为什么不建议用 (a).equals(b) 判断对象相等?

0
分享至

一直以为这个方法是java8的,今天才知道是是1.7的时候,然后翻了一下源码。

这片文章中会总结一下与a.equals(b)的区别,然后对源码做一个小分析。

一、值是null的情况

1.a.equals(b), a 是null, 抛出NullPointException异常。

2.a.equals(b), a不是null, b是null, 返回false

3.Objects.equals(a, b)比较时, 若a 和 b 都是null, 则返回 true, 如果a 和 b 其中一个是null, 另一个不是null, 则返回false。

注意:不会抛出空指针异常。

null.equals("abc") → 抛出 NullPointerException 异常
"abc".equals(null) → 返回 false
null.equals(null) → 抛出 NullPointerException 异常
Objects.equals(null, "abc") → 返回 false
Objects.equals("abc",null) → 返回 false
Objects.equals(null, null) → 返回 true
二、值是空字符串的情况

1.a 和 b 如果都是空值字符串:"", 则a.equals(b), 返回的值是true, 如果a和b其中有一个不是空值字符串,则返回false;公众 号Java精选,回复java面试,获取面试资料,支持在线刷题。

2.这种情况下Objects.equals与情况1 行为一致。另外,推荐摸鱼神器:https://www.yoodb.com/

"abc".equals("") → 返回 false
"".equals("abc") → 返回 false
"".equals("") → 返回 true
Objects.equals("abc", "") → 返回 false
Objects.equals("","abc") → 返回 false
Objects.equals("","") → 返回 true
三、源码分析 1.源码public final class Objects {
private Objects() {
throw new AssertionError("No java.util.Objects instances for you!");

/**
* Returns {@code true} if the arguments are equal to each other
* and {@code false} otherwise.
* Consequently, if both arguments are {@code null}, {@code true}
* is returned and if exactly one argument is {@code null}, {@code
* false} is returned. Otherwise, equality is determined by using
* the {@link Object#equals equals} method of the first
* argument.
*
* @param a an object
* @param b an object to be compared with {@code a} for equality
* @return {@code true} if the arguments are equal to each other
* and {@code false} otherwise
* @see Object#equals(Object)
*/
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
2.说明

首先,进行了对象地址的判断,如果是真,则不再继续判断。

如果不相等,后面的表达式的意思是,先判断a不为空,然后根据上面的知识点,就不会再出现空指针。

所以,如果都是null,在第一个判断上就为true了。如果不为空,地址不同,就重要的是判断a.equals(b)。

四、“a==b”和”a.equals(b)”有什么区别?

如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true。

而 a.equals(b) 是进行逻辑比较,当内容相同时,返回true,所以通常需要重写该方法来提供逻辑一致性的比较。

作者:曹军 https://www.cnblogs.com/juncaoit/p/12422752.html

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
《庆余年2》:看懂庆帝赐婚三人才知,叶轻眉为何跟他未婚生子

《庆余年2》:看懂庆帝赐婚三人才知,叶轻眉为何跟他未婚生子

楼兰娱姐
2024-05-18 12:34:12
早期照片,不愧是被sm星探选中两次,天生就是吃演员这碗饭!

早期照片,不愧是被sm星探选中两次,天生就是吃演员这碗饭!

娱乐八卦木木子
2024-05-19 03:35:41
晚上11点,曼城争冠夜:4种结果,输球也能卫冕,瓜迪奥拉7年6冠

晚上11点,曼城争冠夜:4种结果,输球也能卫冕,瓜迪奥拉7年6冠

侃球熊弟
2024-05-19 05:55:02
杭州:拟发放“杭州文商旅消费卡”,外地观众满足条件可领取价值1672元消费卡

杭州:拟发放“杭州文商旅消费卡”,外地观众满足条件可领取价值1672元消费卡

界面新闻
2024-05-17 11:36:45
耗资9.4亿,北美夺冠,中国票房仅171万,观众给好莱坞上了一课

耗资9.4亿,北美夺冠,中国票房仅171万,观众给好莱坞上了一课

靠谱电影君
2024-05-17 22:43:20
新加坡新任总理夫人因高颜值上热搜!黑裙配金链太美,堪比女明星

新加坡新任总理夫人因高颜值上热搜!黑裙配金链太美,堪比女明星

时尚丽人风行
2024-05-17 19:34:30
网传某亲子鉴定机构开业第一天就被砸了!网友:这不已经鉴定完了

网传某亲子鉴定机构开业第一天就被砸了!网友:这不已经鉴定完了

火山诗话
2024-05-17 19:08:54
如果台湾提出回归条件:社会制度不变,军队保留,大陆会同意吗

如果台湾提出回归条件:社会制度不变,军队保留,大陆会同意吗

人间史名人录
2024-05-17 15:52:54
13亿资金不翼而飞 股价跌出翔 公司出事股民扛雷!退市警示急追

13亿资金不翼而飞 股价跌出翔 公司出事股民扛雷!退市警示急追

惜别的海岸
2024-05-18 19:54:24
韩国主帅赖着不走,中超4连败直冲降级区,拒辞职,给违约金才走

韩国主帅赖着不走,中超4连败直冲降级区,拒辞职,给违约金才走

小金体坛大视野
2024-05-18 13:24:44
大伙要提前做好准备,不出意外:6月份起,会发生3个重要转变!

大伙要提前做好准备,不出意外:6月份起,会发生3个重要转变!

山丘楼评
2024-05-18 10:14:46
89万欧元!13岁梅西和巴萨签约的餐巾纸拍卖已成交

89万欧元!13岁梅西和巴萨签约的餐巾纸拍卖已成交

懂球帝
2024-05-18 05:23:14
史诗级大“泡沫”!

史诗级大“泡沫”!

韩楠楠爱运动
2024-05-18 23:11:29
成功抵达月球!为啥嫦娥六号登月要53天,美国阿波罗飞船仅需8天

成功抵达月球!为啥嫦娥六号登月要53天,美国阿波罗飞船仅需8天

吃鱼思故渊
2024-05-16 21:50:58
印度外长对中国放话了,苏杰生声称在与中国打交道的时候要当心!

印度外长对中国放话了,苏杰生声称在与中国打交道的时候要当心!

杂谈天下式
2024-05-18 22:13:51
钱到账了,工龄40年,个人账号114751.6元,江苏某职工退休金曝光

钱到账了,工龄40年,个人账号114751.6元,江苏某职工退休金曝光

暖心的小屋
2024-05-18 20:17:21
云南一男子强奸嫂子,嫂子绝望哀求:只要别杀我,想干什么都行

云南一男子强奸嫂子,嫂子绝望哀求:只要别杀我,想干什么都行

玲说百态味
2024-05-16 17:21:28
内蒙男子发现妻子出轨,在卧室装7个摄像头,情夫身份让他崩溃

内蒙男子发现妻子出轨,在卧室装7个摄像头,情夫身份让他崩溃

莉雅细细谈
2024-05-18 17:59:11
没冠军也没纪录凯恩32轮36球金靴,无缘打破莱万29轮41球纪录

没冠军也没纪录凯恩32轮36球金靴,无缘打破莱万29轮41球纪录

直播吧
2024-05-18 23:56:18
王毅当面要求韩方恪守一中,话音刚落,尹锡悦亲信宣布将窜访台湾

王毅当面要求韩方恪守一中,话音刚落,尹锡悦亲信宣布将窜访台湾

贺文萍
2024-05-18 14:15:02
2024-05-19 07:38:44
Java精选
Java精选
一场永远也演不完的戏
1548文章数 3855关注度
往期回顾 全部

头条要闻

雷军直播开车遭遇恶意别车 直呼"真的想举报他"

头条要闻

雷军直播开车遭遇恶意别车 直呼"真的想举报他"

体育要闻

天赋最差的人,成为NBA最强替补控卫

娱乐要闻

《庆余年2》首播口碑出炉!有好有坏

财经要闻

史诗级利好,房地产这次有救了吗?

科技要闻

高合复活!

汽车要闻

智驾升级/月底上市 问界新M7 MAX焕新版

态度原创

游戏
家居
艺术
数码
军事航空

BLG击败T1之战,刷新海外观赛人数新记录!Bin的表现,征服韩国人

家居要闻

遇见交响 音乐流动在设计之中

艺术要闻

真诚度101%,35岁的诚品画廊为什么选择北京?

数码要闻

搭载骁龙X处理器的三星Galaxy Book4 Edge即将发布

军事要闻

美称建立加沙临时码头 加沙民众强烈反对

无障碍浏览 进入关怀版