【问题标题】:Overwritten equals() method requires null check? (java) [duplicate]覆盖的 equals() 方法需要空检查吗? (java) [重复]
【发布时间】: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的一个实例)。 stackoverflow.com/a/2707333/2970947
  • cl 应该是 Cl 甚至更好:相关名称。请遵循 Java 命名约定:包、属性、变量、参数、方法必须以 lowerCase 开头,而类、接口应以 UpperCase 开头
  • @ElliottFrisch null instanceof NullType 给了我错误;(虽然没有 NPE
  • i的类型是什么?如果它不是原始类型,您可能还想使用equals。否则这对我来说很好。

标签: java null equals


【解决方案1】:

我认为,null 检查不是必需的,也不应该存在,因为在这种情况下,如果 obj 是 null,则不会出现任何编译时错误或任何异常,因为检查 if (obj instaceof C1) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2019-01-22
    相关资源
    最近更新 更多