覆盖equals方法

Iña*_*aki 3 java overriding equals

这里有新手问题:

所以在我的大学作业中,我必须为我创建的新类重写对象类equals方法.

新类是"Product",每个产品都有一个唯一的"id"属性.所以这就是我覆盖它的方式:

@Override
public boolean equals(Object obj) {
       final Product other = (Product) obj;
       if (id != other.id)
           return false;
       return true;
   }
Run Code Online (Sandbox Code Playgroud)

事情是这样做是10分中的1.5分,这让我怀疑是那么容易.所以我开始搜索,我找到了类似的东西:

@Override
public boolean equals(Object obj) {
       if (this == obj)
           return true;
       if (obj == null)
           return false;
       if (getClass() != obj.getClass())
           return false;
       final Product other = (Product) obj;
       if (id != other.id)
           return false;
       return true;
   }
Run Code Online (Sandbox Code Playgroud)

这对我来说根本没有意义,因为我认为最后一个如果检查所有其他的ifs限制.你们有什么想法?哪种更好的方法来覆盖这种方法?

谢谢!

Jon*_*eet 14

第二段代码更好:

  • 它是优化的x.equals(x),这对于正确性来说不是必需的,但是是一种有用的优化
  • 它应对x.equals(null)而不是投掷NullPointerException
  • 它处理一个完全不同的类的对象而不抛出ClassCastException你自己的类(例如x.equals("foo"))
  • 它需要完全相同的类型才能提供对称关系; 否则obj.equals(x)可以调用不同的方法,给出不同的结果.

  • @ignis:这取决于你的"工作"是什么意思.它不会将Product的实例视为等于子类的实例,不 - 但我认为这不会被破坏,这只是需要记录的行为. (2认同)