我们还是写一个案例,来探讨它的作用。
写三个类,一个是子类Child.class,一个是父类Person.class,一个是测试类Test.class
Person父类很简单,就一个属性code;
Child子类也很简单,继承了父类之后,自己也是定义了一个属性name;
Test类:
创建了两个Child,属性code是不一样的,一个是c1,一个是c2,但是name是相同的,都是“小毛孩”,然后我们现在也没有在子类Child类上加注解@EqualsAndHashCode(callSuper = true),我们看看运行结果是如何,通过运行结果来分析。
运行结果:
第一个== 是false,我相信大家都懂,因为new了两个对象,就会在堆中创建出两个地址不同的对象;
第二个equlas是true,我相信大家是有点疑问的,equals比较的是两个对象的内容值,但是现在这两个对象的内容
一个child1的code是c1,name是“小毛孩”;
一个child2的code是c2,name是“小毛孩”;
那么他们的内容值是不同的,为什么最终结果还是true呢?
原因可能就是和注解EqualsAndHashCode(callSuper = true)有关吗,我们先不着急下结论,我们现在先在子类Child的类上加上这个注解试试。
看到没有,@Data注解下面也不会有提示曲线了。
我们再次点击运行。看看运行结果。
运行结果:
结果变了,都是false了。所以原因就是这个注解搞的鬼。
注解EqualsAndHashCode(callSuper = true)的作用就是,如果你没在子类的类上加上的话,那么它是会忽略父类继承过来的属性的,只会关注子类自身的属性。所以一开始两个child虽然他们的code是不同的,name是相同的,但是由于没加上这个注解,忽略了父类的code,只会关注子类Child的name,就会就是true了。
总结:
@EqualsAndHashCode(callSuper = true)的作用就是不会忽略父类的属性,也会对父类的属性进行比较。
最后:文章来源:https://www.toymoban.com/news/detail-776660.html
如果大家觉得这篇文章对你们有所帮助的话,麻烦点个免费的赞赞,也祝各位码农在未来的IT道路上越走越远,谢谢!文章来源地址https://www.toymoban.com/news/detail-776660.html
到了这里,关于为什么需要在bean上使用@EqualsAndHashCode(callSuper = true)这个注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!