今天在编写一个小程序的时候使用了 ==
来判断俩个对象是否相等,可是程序并没有呈现出我想要的结果,于是我想起了以前见到的equals()
方法,在改写为equals()
方法后如愿的完成了该程序的功能。
两者的主要区别有以下几点(以下内容借鉴了别人的文章):
equals()
是方法,而==
是操作符;- 对于8个基本类型的变量,只能使用
==
来比较他们的值 ,因为这些基本类型的变量没有equals()
方法。 - 对于引用类型的变量(例如
String
类)才有equals()
方法,因为String
类继承了Object
类,equals()
是Object
类的通用方法。对于该类型对象的比较,默认情况下,也就是没有复写Object
类的equals()
方法,使用==
和equals()
比较是一样效果的,都是比较的是它们在内存中的存放地址。但是对于某些类来说,为了满足自身业务需求,可能存在equals()
方法被复写的情况,这时使用equals()
方法比较需要看具体的情况,例如String
类,使用equals()
方法会比较它们的值;
equals()
方法的正确编写方法:
- 先确定实例“相等”的逻辑,即哪些字段相等,就认为实例相等;
- 用
instanceof
判断传入的待比较的Object
是不是当前类型,如果是,继续比较,否则,返回false
; - 对引用类型用
Objects.equals()
比较,对基本类型直接用==
比较。
使用Objects.equals()
比较两个引用类型是否相等的目的是省去了判断null
的麻烦。两个引用类型都是null
时它们也是相等的。
如果不调用List
的contains()
、indexOf()
这些方法,那么放入的元素就不需要实现equals()
方法。
注:部分内容来自廖雪峰大大和chocolatezhu。