equals和==的区别

目录

一、先说结论

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并不可变的。

 

相关推荐

  1. “==”equals区别

    2024-04-04 16:48:02       41 阅读
  2. == equals 区别

    2024-04-04 16:48:02       35 阅读
  3. == equals 区别是什么?

    2024-04-04 16:48:02       24 阅读
  4. C# 中 == Equals 区别

    2024-04-04 16:48:02       15 阅读
  5. 【== equals 区别是什么?】

    2024-04-04 16:48:02       9 阅读
  6. equals==有什么区别

    2024-04-04 16:48:02       15 阅读
  7. “==“ equals 方法究竟有什么区别

    2024-04-04 16:48:02       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 16:48:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 16:48:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 16:48:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 16:48:02       18 阅读

热门阅读

  1. Chrome安装Vue插件vue-devtools

    2024-04-04 16:48:02       14 阅读
  2. 数据结构之图

    2024-04-04 16:48:02       12 阅读
  3. 2024.3.9力扣每日一题——找出数组的第 K 大和

    2024-04-04 16:48:02       15 阅读
  4. C++---string与字符数组之间的相互转换

    2024-04-04 16:48:02       11 阅读
  5. Ribbon 和 Feign的区别

    2024-04-04 16:48:02       13 阅读
  6. 每日一题:C语言经典例题之反转数

    2024-04-04 16:48:02       16 阅读
  7. 【Rust】——生命周期

    2024-04-04 16:48:02       15 阅读