应该是this.getClass()!=obj.getClass 吧!
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
if(obj.getClass() != XXXClass.class) return false;
用被比较对象的class对象和当前对象的class比较,看起来是没有问题,但是,如果这个类的子类没有重新实现equals方法,那么当子类.equals(子类)比较时,也就是要使用“if(obj.getClass() != XXXClass.class) return false;”来进行比较了,显然obj.getClass()《这个是字类》 肯定不等于XXXCalss.class《这个是父类》,从这里就直接返回得到false的结果了,因此子类中定义的equals实际上根本没发挥出应有的效力来,所以if(obj.getClass() != this.getClass()) return false;才是正确的比较。 呵呵,看到了没?我们首先否定了instanceof,接下来又否定了“obj.getClass() != XXXClass.class”这种错误的比较做法,最后才给出了正确的比较方法。
另外一个quick check是if(this==obj) return true;而且这个短路优化应该放在“obj.getClass() != XXXClass.class”优化的前面。
|