为什么在Java中使用默认的Object equals方法更好?

tem*_*mpy 5 java overriding overloading equals

为什么在Java中使用默认的Objectequals方法并将其修改为更适合特定的类(通过instanceof使用类型转换进行验证):

public boolean equals(Object otherObject)
{
   boolean isEqual = false;

   if ((otherObject != null) && (otherObject instanceof myClass))
      {
         myClass classObject = (myClass)otherObject;

         if (.....) //checking if equal
         {
            .....
}
Run Code Online (Sandbox Code Playgroud)

而不是使用equals特定于每个需要使用的类的新方法重载它equals:

public boolean equals(myClass classObject)
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 7

签名Object.equals()public boolean equals(Object).如果您定义了一个方法public boolean equals(MyClass),那么您将添加一个具有不同签名的新方法,而不是覆盖(或重新定义,如果您愿意)该Object.equals()方法.

由于所有集合都调用该Object.equals()方法,因此除了您自己的代码之外,任何人都不会调用您的新方法,因此几乎无用.例如,如果您创建了一个Set<MyClass>,它会认为两个实例是不同的,尽管您的equals(MyClass)方法认为它们是相同的.

  • 您可以定义`equals(MyClass)`方法.请注意,它不会被标准集合使用,而只能由您自己的代码使用.例如,如果你创建一个`Set <MyClass>`,它会认为两个实例是不同的,尽管你的equals(MyClass)方法认为它们相等. (2认同)