面试需理解Object核心方法逻辑:toString()重写为调试可读性;equals()与hashCode()必须同步重写且字段一致;getClass()不可重写,clone()需实现Cloneable并处理浅拷贝;wait/notify需在synchronized中使用。

别硬背,理解逻辑再记关键词,面试官要的是你懂为什么,不是复述定义。
toString() —— 打印时用的“名片”
默认返回 类名@十六进制哈希值(比如 Person@1b6d3586),根本看不出对象内容。实际开发中必须重写,让它返回有意义的字段信息,比如 "Person{name='张三', age=25}"。面试常问:为什么重写?答:方便调试、日志输出、单元测试断言——不是为了好看,是为可读性和可维护性。
equals() 和 hashCode() —— 一对绑定出场的“双胞胎”
默认 equals() 等价于 ==,只比内存地址;hashCode() 默认基于地址生成整数。但只要重写 equals(),就必须同步重写 hashCode(),否则放进 HashMap 或 HashSet 会找不到对象。关键点有三个:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- equals() 要满足自反、对称、传递、一致、非空五条规则
- 比较前先判 this == obj,再判 null 和类型是否匹配
- hashCode() 的计算字段,必须和 equals() 中用于判断相等的字段完全一致(比如 name + age)
getClass() 和 clone() —— 一个不能改,一个得手动开权限
getClass() 是 final 方法,没法重写,它返回运行时真正的 Class 对象,反射时必用。而 clone() 是 protected 的,想用就得在子类里改成 public,且类要实现 Cloneable 接口,否则抛 CloneNotSupportedException。注意:Object 的 clone() 是浅拷贝,引用类型字段只是复制了地址,不是新对象——这点常被追问,深拷贝得自己递归处理或用序列化等方式实现。
立即学习“Java免费学习笔记(深入)”;
wait/notify/notifyAll —— 多线程协作的“信号灯”
这三个方法操作的是对象的内置锁(monitor),所以必须在 synchronized 块或方法里调用,否则抛 IllegalMonitorStateException。wait() 让当前线程释放锁并等待,notify() 随机唤醒一个等待线程,notifyAll() 唤醒全部。它们不直接属于“日常业务编码”,但一问线程通信机制,就会落到这儿——记住:它们和 synchronized 是一套机制,脱离锁谈 wait 就是错的。

















