@EqualsAndHashCode(callSuper = false和ture)的区别
区别
如果值是true,那么会比较父类的字段值,只有两个对象的父类字段也相同的时候,两个对象的比较结果才会是true;如果值是fasle,那么既便两个对象的父类字段不同,但是子类字段值相同,那么两个对象的比较结果也会是ture,默认callSuper的值为false;
代码如下图:
首先写一个动物父类Animal如下图:
然后写一个Cat子类,如下图:
最后看下具体的比较逻辑类,如下图:
可以看出虽然两个猫的名字不同,但是比较结果仍然是true,因为名字是父类的字段,而我们callSuper的值指定的为false,因此只会比较子类Cat中的属性字段color,不会比较父类中的属性字段name,只要两个猫的颜色相同,返回结果就是true;
如果我们把callSuper的值指定为true,那么比较的时候也会顺带着比较父类字段的值,也就是会比较name字段,因为两个猫的名字不同,所以返回结果为false。