equals和==的区别

本文探讨了Java中equals()方法与==运算符的区别,着重讲解了它们在比较对象引用和值时的行为,并介绍了Lombok库中的@Data注解及其生成的getter、setter等方法。同时讨论了其他Lombok常用注解的作用。
摘要由CSDN通过智能技术生成

目录

一、先说结论

1. equals的分析与结论

2. ==的结论

3. 应用举例

二、GitCode AI的回答 

三、@Data注解扩展


一、先说结论

1. equals的分析与结论

equals分析:

  • equals(Object obj)方法是Object超类中的方法,比较的是对象在内存中是否为同一个对象,即比较的是地址值(equals方法默认比较的是对象的引用是否相等);

  • String类中的equals方法对Object超类中的equals方法进行了重写,比较的是两个字符串的值本身(即字面量)是否相等;

equals结论:

  • 自定义的类:如果没有重写equals方法时,比较的当然是两个对象的引用是否相等;如果想比较对象本身是否相等时,需要重写equals方法自定义比较逻辑;
  • 字符串的比较:String.java类重写了equals方法,所以字符串比较时,比较的是值是否相等【再如Integer类也重写了equals方法】。

2. ==的结论

  • ==比较8大基本数据类型时:比较的是值本身是否相等;
  • ==比较引用类型时(String属于引用类型):比较的是地址值。

3. 应用举例

String a = "saff";
String b = "saff";
String c = new String("saff");
System.out.println(a.equals(b));  // true
System.out.println(a.equals(c));  // true
System.out.println(a == b); // true
System.out.println(a == c); // false

分析:上面a、b、c都是字符串类型,所以对于字符串类型,==比较的就是地址值是否相等,equals比较的就是值本身是否相等。a、b都在常量池中,内存地址的指向相同,而new的对象c在堆中。

二、GitCode AI的回答 

三、@Data注解扩展

@Data是Lombok库提供的一种注解,它能自动为Java类生成getter、setter、equals、hashCode和toString等常见方法。这样可以避免在类中手动编写这些重复的代码,从而让代码更简洁且易于维护。@Data默认还会生成一个无参构造方法,不过这可以被其他配置改变。(以前只知道该注解自动生成了,却不知道还自动生成了equals、hashCode、toString和一个无参构造,验证过了,的确如此)

除了@Data,Lombok还有哪些常用的注解?

Lombok提供了许多其他的注解,用于简化Java代码。以下是一些常用的Lombok注解:

  • @NoArgsConstructor: 生成一个无参数的构造器。
  • @AllArgsConstructor: 生成一个包含所有字段的构造器。
  • @RequiredArgsConstructor: 生成一个包含所有带有final修饰符或标注了@NonNull(需要引入额外依赖)的字段的构造器。
  • @NonNull: 标记一个字段为非空,通常与@AllArgsConstructor一起使用。
  • @Getter 和 @Setter: 分别生成getter和setter方法,只针对指定的字段或类的所有字段。
  • @Log@Log4j@Logback: 自动添加日志对象,如Logger log = Logger.getLogger(this.getClass());
  • @ToString: 生成toString()方法,列出所有字段。
  • @EqualsAndHashCode: 生成equals()hashCode()方法,可以选择是否包括所有字段。
  • @Cleanup: 在try/catch块中自动关闭资源。
  • @Synchronized: 将方法或块同步化。
  • @Builder: 生成构建者模式的代码,方便创建复杂对象。
  • @Value: 类似于@Data,但是默认所有的字段都是final并不可变的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值