Lombok 的 @EqualsAndHashCode(callSuper = false) 的使用

发布时间:2024-11-25 01:53

使用可重复使用的袋子、瓶子和餐具,减少一次性用品的使用。 #生活知识# #节约#

这个注解的作用就是自动的给model bean实现equals方法和hashcode方法。

但是,这个参数,callsuper = false 有问题吗?

你在使用这个注解的时候,确定知道“为什么要重写hashcode和equals方法吗?”

先看下面的测试。

两个model的代码我就截图啦:父类 TV.java 和 子类 小米TV.java,使用这个注解@EqualsAndHashCode(callSuper = false) 

大å¸å

小米tv继承tv,从继承角度讲tv有的属性,小米tv也是有的。

看测试main方法

import com.lxk.model.XiaoMiTV;

public class EqualsAndHashCodeTest {

public static void main(String[] args) {

XiaoMiTV tv1 = new XiaoMiTV("123", "lxk", 1L, "白");

XiaoMiTV tv2 = new XiaoMiTV("456", "sql", 1L, "白");

System.out.println(tv1.equals(tv2));

}

}


来吧,大胆猜测一下,这个代码的运行结果。true还是false?

猜完了,来看下运行结果图:

大å¸å

这个因为咱在子类里面这么使用@EqualsAndHashCode(callSuper = false) ,不调用父类的属性,那么子类属性里面的相同的话,那hashcode的值就相同啦,所以代码里面的2个tv的equals方法的返回值是true

那么,把@EqualsAndHashCode(callSuper = false) 的false改成true之后的结果呢?

来,再猜测一下。

猜完了,看运行结果(就只改@EqualsAndHashCode(callSuper = false) 里面的false改成true)

大å¸å

这个估计就好猜了。@EqualsAndHashCode(callSuper = true),那就是用自己的属性和从父类继承的属性 来生成hashcode,比较的结果就好猜啦。

那么,再把@EqualsAndHashCode(callSuper = false) 这个语句注释了呢?这个时候代码运行结果如何?

来,还是再猜一下吧。

猜完了,看下运行结果图

大å¸å

竟然是true,因为@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集, @EqualsAndHashCode默认是false。

最后再问一下,set为啥能去重复呢?刚刚那2个tv都放到一个set里面,能放进去吗?

因为set用hashcode确定位置,hashcode相同会被覆盖。

网址:Lombok 的 @EqualsAndHashCode(callSuper = false) 的使用 https://www.yuejiaxmz.com/news/view/247651

相关内容

慎用ASP.Net的validateRequest=“false”
认识Visible=false
Python requests 移除SSL认证,verify=False,取消控制台输出的InsecureRequestWarning警告
python if是如何判断true或False的呢? is和== 有什么区别呢?
以下 Javsscript 的运行结果为 var m = false; if (
{} == {},[]==[] 结果为什么是false?
为什么Java中“1000==1000”为false,而”100==100“为true?
python程序,如果设置console=False,用pyinstaller打包成exe,运行出错“Failed to execute script”
奇怪的Java题:为什么1000 == 1000返回为False,而100 == 100会返回为True?
input的type=file上传图片简单使用

随便看看