Java对象比较应使用equals方法
对象比较应使用equals()方法而非==,因==比较引用地址;重写equals()需满足自反性、对称性、传递性、一致性,且与null比较返回false;同时应重写hashCode()以保证相等对象具有相同哈希码,确保集合类正常工作。
对象比较应使用equals()方法而非==,因==比较引用地址;重写equals()需满足自反性、对称性、传递性、一致性,且与null比较返回false;同时应重写hashCode()以保证相等对象具有相同哈希码,确保集合类正常工作。

在Java中,对象的比较不能直接使用==运算符来判断两个对象的内容是否相等,因为==比较的是引用地址,即是否指向同一个对象实例。要比较对象的实际内容,应使用equals()方法。
使用 equals() 方法进行内容比较
Object类中的equals()方法默认也是比较引用地址,但很多类(如String、Integer、List等)都重写了该方法,用于比较对象的实际内容。
例如:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false,引用不同
System.out.println(str1.equals(str2)); // true,内容相同
如果你自定义了一个类,比如Person,需要根据业务逻辑重写equals()方法,才能正确比较两个对象是否“相等”。
重写 equals() 的注意事项
当重写equals()方法时,应遵循Java规范中的约定,确保满足以下条件:
- 自反性:x.equals(x) 应返回 true
- 对称性:如果 x.equals(y) 为 true,则 y.equals(x) 也应为 true
- 传递性:如果 x.equals(y) 和 y.equals(z) 都为 true,则 x.equals(z) 也应为 true
- 一致性:多次调用结果不变,只要对象未被修改
- 与 null 比较应返回 false:x.equals(null) 应返回 false
通常建议使用IDE生成或手动编写包含关键字段的比较逻辑。例如:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return Objects.equals(name, person.name) &&
Objects.equals(age, person.age);
}
配合 hashCode() 使用
如果重写了equals(),还应同时重写hashCode()方法,以保证在HashMap、HashSet等集合中能正常工作。两个相等的对象必须具有相同的哈希码。
可以使用Objects.hash(...)来简化hashCode()的实现。
基本上就这些。对象比较用equals(),必要时重写它,并记得同步处理hashCode()。不复杂但容易忽略细节。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















