覆盖的 equals() 方法需要空检查吗? (java) [重复]
Posted
技术标签:
【中文标题】覆盖的 equals() 方法需要空检查吗? (java) [重复]【英文标题】:Overwritten equals() method requires null check? (java) [duplicate] 【发布时间】:2019-05-19 07:13:24 【问题描述】:我为一个类写了一个简单的 equals() 方法:
@Override
public boolean equals(Object obj)
if(obj instanceof Cl)
Cl u = (Cl)obj;
return u.i == i;
else
return false;
据我所知,如果我想比较类对象是否等于空对象,由于 instanceof,这将返回 false,但根据我的 uni 老师的说法,这是一个糟糕的实现,因为缺少空检查。谁能帮我确认一下我的理论是否正确?
【问题讨论】:
不会抛出 NPE 吗? 你的uni老师不正确,obj instaneof
是null
安全测试(因为null
只是NullType的一个实例)。 ***.com/a/2707333/2970947
cl
应该是 Cl
甚至更好:相关名称。请遵循 Java 命名约定:包、属性、变量、参数、方法必须以 lowerCase 开头,而类、接口应以 UpperCase 开头
@ElliottFrisch null instanceof NullType
给了我错误;(虽然没有 NPE
i
的类型是什么?如果它不是原始类型,您可能还想使用equals
。否则这对我来说很好。
【参考方案1】:
我认为,null
检查不是必需的,也不应该存在,因为在这种情况下,如果 obj 是 null
,则不会出现任何编译时错误或任何异常,因为检查 if (obj instaceof C1)
.
【讨论】:
以上是关于覆盖的 equals() 方法需要空检查吗? (java) [重复]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要覆盖 Java 中的 equals 和 hashCode 方法?
为啥我需要覆盖 Java 中的 equals 和 hashCode 方法?