object类面试核心是三个重写方法(tostring、equals、hashcode)、两个线程机制(wait/notify基于监视器模型)、一个设计逻辑(clone需cloneable且浅拷贝,getclass为final)。

Object 类是 Java 面试的“必争之地”,不是因为它难,而是因为它太基础、太高频——答得平平无奇容易丢分,答得深入精准反而能拉开差距。破题关键不在背全11个方法,而在聚焦三个重写核心 + 两个线程机制 + 一个设计逻辑,用结构化表达展现底层理解。
重点盯牢这三个必须重写的方法
面试官真正想看的,是你是否理解“约定大于实现”。这三个方法不是孤立存在,而是彼此强约束:
-
toString():默认输出形如
Person@1a2b3c,毫无业务意义;重写时要返回可读、稳定、不含敏感信息的字符串(比如"User{id=101, name='张三'}"),调试日志、单元测试断言都依赖它。 -
equals(Object obj):默认只比引用(
this == obj);重写必须满足五条契约(自反、对称、传递、一致、非空),且类型检查不能只用instanceof(子类继承时可能破坏对称性),推荐用getClass() == obj.getClass()。 -
hashCode():只要 equals 返回 true,hashCode 就必须相同;但 hashCode 相同,equals 不一定为 true。重写时建议用
Objects.hash(field1, field2),避免手写乘加运算出错;放入 HashMap 的对象,不重写 hashCode 就会“找不到”。
wait/notify 为什么在 Object 里,而不是 Thread?
这不是考记忆,是考设计思想。回答要落到“监视器模型”上:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- Java 中每个对象天然带一把锁(monitor),等待和唤醒动作针对的是“对象的锁”,不是某个线程本身;
- 线程调用
obj.wait(),本质是释放obj的锁并进入其等待队列;obj.notify()是唤醒该队列里的线程; - 如果放在 Thread 类里,就无法表达“哪个对象的锁被等待”,也无法支持多对象协作(比如生产者等缓冲区满,消费者等缓冲区空)。
clone 和 getClass 是“边界型”考点
它们不常重写,但问到就是验真功夫:
-
clone():默认是浅拷贝,且是
protected方法;要用必须实现Cloneable接口,并把方法改为public;深拷贝需手动处理引用字段,或用序列化/JSON 工具绕过限制。 -
getClass():是
final方法,不可重写;返回运行时真实类型(非声明类型),是反射和泛型类型擦除后做类型判断的唯一可靠依据(比如list.getClass().getName()能区分ArrayList和LinkedList)。
finalize 已废弃,提一句就行
JDK 9 开始标记为 @Deprecated,JDK 18 彻底移除;GC 不再保证调用,资源清理必须用 try-with-resources 或显式 close;面试中提到“替代方案”比解释作用更重要。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










