【发布时间】:2025-11-28 08:40:01
【问题描述】:
尝试使用示例代码检查 record 与 class 的 equals() 和 hashCode() 的默认行为,但 record 的行为似乎不同strong> 与 class 比较。
这是 record 和 class
的代码示例public class EqualsAndHashcode {
public static void main(String[] args) {
var employeeA = new Employee(101);
var employeeB = new Employee(101);
var employeeAClass = new EmployeeClass(102);
var employeeBClass = new EmployeeClass(102);
var printStream = System.out;
printStream.println("record equals: " + employeeA.equals(employeeB) + "\nhashcode objA: " + employeeA.hashCode() + "\nhashcode objB: " + employeeB.hashCode());
printStream.println("\nclass equals: " + employeeAClass.equals(employeeBClass) + "\nhashcode objA: " + employeeAClass.hashCode() + "\nhashcode objB: " + employeeBClass.hashCode());
}
}
record Employee(int empId) {
}
class EmployeeClass {
int empId;
EmployeeClass(int empId) {
this.empId = empId;
}
}
以上代码执行后输出为:
record equals: true
hashcode objA: 101
hashcode objB: 101
class equals: false
hashcode objA: 935044096
hashcode objB: 396180261
谁能帮我理解 records default implementation for equalsandhashCode` 的行为与上述有何不同?
如果equals 和hashCode 的实现有更改记录,那么请帮助我了解更改的确切目的以及在哪些情况下使用它会更有帮助。
【问题讨论】:
-
记录的全部目的是成为一个值对象,所以自动比较是有意义的。
标签: java equals hashcode java-record java-17