维护Java项目时发现"=="顺手改成equals之后,发生了什么?

JAVA学习网 2021-03-15 15:56:03

最近发生一件很尴尬的事情,在维护一个Java项目的时候,发现有使用"=="来比较两个对象的属性,
面试题看到的["=="和equals的区别]瞬间点燃了我,于是顺手就把"=="改成了equals。悲剧发生......

"=="和equals的区别

"==":值比较
equals:引用比较,但一些类重写了equals方法,如String、Integer等,变成了值比较。
所以我把"=="修改成equals,看起来正确至极,实际也正确,只是考虑不至极。

使用equals的前提

使用equals进行比较,如:
a和b是两个对象
a.getId().equals(b.getId())
需要确保a.getId()不为null,因为null是没有.equals()方法的。

各种对象使用equals

String类型:
可以使用StringUtils.equals()进行比较,该方法内置非空校验
其余封装类型:
可以使用Objects.equals()进行比较,该方法内置非空校验
使用三目运算符:
a.getId() == null ? b.getId() == null ? false : true : a.getId().equals(b.getId())

任重而道远,学与用差以毫厘都不行!

阅读(875) 评论(0)