实体上的注解@EqualsAndHashCode
1. 此注解会生成equals(Object other) 和 hashCode()方法。
2. 它默认使用非静态,非瞬态的属性
3. 可通过参数exclude排除一些属性
4. 可通过参数of指定仅使用哪些属性
5. 它默认仅使用该类中定义的属性且不调用父类的方法
6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法
另:@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
详细可参考:Lombok @EqualsAndHashCode 的用法 - 白眉大虾 - 博客园 (cnblogs.com)
当启动@EqualsAndHashCode时,默认不调用父类的equals方法,当做类型相等判断时,会遇到麻烦,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | @Data public class People { private Integer id; } @Data public class User extends People { private String name; private Integer age; } public static void main(String[] args) { User user1 = new User(); user1.setName( "jiangxp" ); user1.setAge( 18 ); user1.setId( 1 ); User user2 = new User(); user2.setName( "jiangxp" ); user2.setAge( 18 ); user2.setId( 2 ); System.out.println(user1.equals(user2)); } 输出结果: true |
需要将@EqualsAndHashCode修改为@EqualsAndHashCode(callSuper = true)才能得到正确结果.
反编译修改后的User.class,发现有些许变化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了