覆盖的 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 instaneofnull安全测试(因为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 方法?

Java:Effective java学习笔记之 覆盖equals时请遵守通用约定

这是检查空数组的正确方法吗?

子父类覆盖方法和实现接口时牵扯到的细节问题。

为啥我需要覆盖 C# 中的 .Equals 和 GetHashCode [重复]