java record从jdk14预览、jdk16正式支持,自动生成equals和hashcode:equals按声明顺序结构化比较字段值并安全处理null,hashcode等价于objects.hash(所有字段),严格满足object契约且不可覆盖。

Java 中的 record 记录类从 JDK 14 作为预览特性首次引入,到 JDK 16 正式成为标准特性,不再需要开启预览开关。
它专为不可变数据载体设计,大幅减少模板代码,而 equals 和 hashCode 是其中最关键、最自动化的部分。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Record 自动生成的 equals 行为
- 编译器为每个 record 自动生成
equals(Object obj)方法 - 比较逻辑是结构化值相等:两个 record 实例相等,当且仅当它们所有组件字段(按声明顺序)都满足
Objects.equals(a, b) - 不依赖引用,不关心对象身份,只看字段值是否一致
- 自动处理 null 安全(比如某个字段为 null,另一个也为 null → 视为相等;一个为 null 另一个非 null → 不等)
Record 自动生成的 hashCode 行为
- 编译器自动生成
hashCode()方法,其逻辑等价于:return Objects.hash(field1, field2, ..., fieldN); - 所有组件字段按声明顺序参与哈希计算
- 保证“相等的对象必须有相同的哈希码”,严格符合
Object契约 - 字段类型不影响生成逻辑——无论
String、int、自定义 record 还是null,都由Objects.hash()统一处理
举个例子
public record Point(int x, String label) {}
-
new Point(1, "A").equals(new Point(1, "A"))→true -
new Point(1, null).equals(new Point(1, null))→true -
new Point(1, "A").hashCode() == new Point(1, "A").hashCode()→true - 但
new Point(1, "A").hashCode() == new Point(2, "A").hashCode()→ 几乎一定false
这些方法无需手动重写,也不能被子类覆盖(record 类天然 final),避免了传统 POJO 中因漏改 hashCode 导致的 HashMap 查找失败等问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










