java中object类的三大核心方法是tostring()、equals()和hashcode():tostring()需重写以输出有意义字段信息;equals()重写必须同时重写hashcode(),且遵循空值、类型、字段逐一对比规范;hashcode()要求等价对象哈希值相等,参与计算的字段须与equals一致且不可变。

Java 中 Object 类是所有类的根父类,面试常考三大核心方法:toString()、equals() 和 hashCode()。答好这三问,关键不是背定义,而是讲清“为什么重写”和“怎么正确重写”。
toString():别让打印只输出地址
默认行为是返回 类名@哈希码(如 Student@1b6d3586),对调试和日志毫无价值。重写目标是返回有意义的字段信息。
- 必须用
@Override显式标注,避免拼写错误 - 推荐用
Objects.toString()或 Lombok 的@ToString避免空指针 - 不建议在
toString()中调用其他对象的复杂方法(如远程查询),可能引发阻塞或异常
equals():内容相等 ≠ 地址相同
默认实现仅比较引用(this == obj),业务中几乎总要重写。但必须同时重写 hashCode(),否则放入 HashMap 等集合会出错。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 重写时先判空:
if (obj == null) return false; - 再判类型:
if (getClass() != obj.getClass()) return false;(用instanceof有继承风险) - 最后逐字段比较,注意基本类型用
==,引用类型用Objects.equals(a, b)
hashCode():等价对象必须等哈希
合同约定:如果 o1.equals(o2) 为 true,那么 o1.hashCode() == o2.hashCode() 必须成立。反过不强制,但冲突越少越好。
- 常用生成方式:IDE 自动生成(IntelliJ / Eclipse),或用
Objects.hash(field1, field2) - 参与计算的字段,必须和
equals()中一致;不可包含可变字段(如时间戳、计数器) - 若类不可变(
final字段),哈希值可缓存,提升性能
其他常考方法简要说明
getClass() 返回运行时类对象,不能重写;wait()/notify() 用于线程通信,需在同步块中调用;clone() 默认浅拷贝,实现深拷贝需手动处理引用字段;finalize() 已废弃,不应依赖它释放资源。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










