我們還是寫一個案例,來探討它的作用。
寫三個類,一個是子類Child.class,一個是父類Person.class,一個是測試類Test.class
Person父類很簡單,就一個屬性code;
Child子類也很簡單,繼承了父類之后,自己也是定義了一個屬性name;
Test類:
創(chuàng)建了兩個Child,屬性code是不一樣的,一個是c1,一個是c2,但是name是相同的,都是“小毛孩”,然后我們現(xiàn)在也沒有在子類Child類上加注解@EqualsAndHashCode(callSuper = true),我們看看運行結(jié)果是如何,通過運行結(jié)果來分析。
運行結(jié)果:
第一個== 是false,我相信大家都懂,因為new了兩個對象,就會在堆中創(chuàng)建出兩個地址不同的對象;
第二個equlas是true,我相信大家是有點疑問的,equals比較的是兩個對象的內(nèi)容值,但是現(xiàn)在這兩個對象的內(nèi)容
一個child1的code是c1,name是“小毛孩”;
一個child2的code是c2,name是“小毛孩”;
那么他們的內(nèi)容值是不同的,為什么最終結(jié)果還是true呢?
原因可能就是和注解EqualsAndHashCode(callSuper = true)有關(guān)嗎,我們先不著急下結(jié)論,我們現(xiàn)在先在子類Child的類上加上這個注解試試。
看到?jīng)]有,@Data注解下面也不會有提示曲線了。
我們再次點擊運行??纯催\行結(jié)果。
運行結(jié)果:
結(jié)果變了,都是false了。所以原因就是這個注解搞的鬼。
注解EqualsAndHashCode(callSuper = true)的作用就是,如果你沒在子類的類上加上的話,那么它是會忽略父類繼承過來的屬性的,只會關(guān)注子類自身的屬性。所以一開始兩個child雖然他們的code是不同的,name是相同的,但是由于沒加上這個注解,忽略了父類的code,只會關(guān)注子類Child的name,就會就是true了。
總結(jié):
@EqualsAndHashCode(callSuper = true)的作用就是不會忽略父類的屬性,也會對父類的屬性進行比較。
最后:文章來源:http://www.zghlxwxcb.cn/news/detail-776660.html
如果大家覺得這篇文章對你們有所幫助的話,麻煩點個免費的贊贊,也祝各位碼農(nóng)在未來的IT道路上越走越遠,謝謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-776660.html
到了這里,關(guān)于為什么需要在bean上使用@EqualsAndHashCode(callSuper = true)這個注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!