java中object类是所有类的根父类,其hashcode与equals必须成对重写以遵守契约,否则hashset重复、hashmap失联;tostring应包含关键业务字段;wait/notify须在synchronized中用while循环;getclass()判等严格,instanceof支持继承。

Java 中 Object 类是所有类的根父类,名企面试常从它切入考察基础功底、设计理解与实战敏感度。想走“直通车”,关键不是背方法列表,而是能讲清每个方法背后的契约、陷阱和工程取舍。
hashCode 与 equals 必须成对重写
这是高频连环问:为什么?不遵守会怎样?HashMap 中怎么崩?
- 只要重写了
equals,就必须重写hashCode,否则违反“相等对象必须有相同哈希码”的契约 - 典型反例:自定义 User 类只重写
equals,放进 HashSet 后可能重复;用作 HashMap key 时可能找不到 - IDE 自动生成(如 IntelliJ 的
Alt+Insert → equals and hashCode)可保结构正确,但需确认字段选择合理(比如是否包含可变字段)
toString 不只是打日志,它是调试接口
面试官可能问:“你重写过 toString 吗?为什么这么写?”
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 默认实现只返回类名+哈希码(如
User@1b6d3586),对排查毫无价值 - 好实践:包含关键业务字段(如
User{id=123, name='张三', status=ACTIVE}),避免敏感信息(密码、token) - 可配合 Lombok 的
@ToString,但需留意 exclude 或 callSuper 等配置是否符合团队规范
wait/notify 是 Object 方法,但必须在 synchronized 块里调用
这题常搭配生产者消费者场景,考线程协作本质
-
wait()会释放锁并挂起当前线程;notify()不释放锁,只唤醒一个等待线程 - 必须用
synchronized包裹,否则抛IllegalMonitorStateException - 永远用 while 循环检查条件(防止虚假唤醒),不用 if —— 这是硬性编码纪律
getClass() 和 instanceof 的语义差异要拎得清
当判断类型时,什么情况该用哪个?
-
getClass() == OtherClass.class严格判断运行时类是否完全相同(不接受子类) -
instanceof支持继承关系判断(如ArrayListinstanceofList),但不能用于 null(会返回 false,不抛异常) - 序列化、泛型擦除后类型恢复等场景,
getClass()更精准;做类型安全转换时,instanceof更常用也更安全
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










