Java中所有类默认继承Object类,最需重写的三个方法是toString()、equals()和hashCode();toString()应清晰安全可读,避免异常与敏感信息;equals()与hashCode()必须成对重写,确保哈希集合正确行为;其他方法如getClass()不可重写,clone()不推荐,finalize()已废弃。

Java 中所有类都默认继承自 Object 类,它提供了若干基础方法。其中最常被重写、也最影响开发质量的有三个:toString()、equals() 和 hashCode()。其他如 getClass()、clone()、wait() 等虽存在,但多数场景下无需重写或已不推荐使用。
toString():让对象“会说话”
默认返回形如 com.example.User@1b6d3586 的字符串,只含类名和哈希码,对调试、日志、集合打印毫无帮助。
- 重写目标是清晰、安全、可读:包含关键字段(如 id、name、status),避开敏感信息(如 password)
- 对 null 字段做显式处理,推荐用
Objects.toString(field, "null"),避免空指针或误导性空串 - 格式统一,建议采用
ClassName{field1=value1, field2=value2}结构,便于人眼扫描 - 禁止在 toString() 中调用可能抛异常、触发远程调用或修改状态的方法
equals() 与 hashCode():必须成对重写
这两个方法语义强绑定。只重写 equals() 而不重写 hashCode(),会导致对象在 HashMap、HashSet 中行为异常——逻辑相等的对象可能查不到、去不掉重、甚至“消失”。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
equals()重写模板:先判this == obj,再判obj == null || getClass() != obj.getClass(),最后用Objects.equals()比较字段 -
hashCode()必须用和equals()相同的非静态字段计算,推荐直接调用Objects.hash(f1, f2, ...) - 基本类型用
==,引用类型统一用Objects.equals(),避免手写 null 判断出错 - 子类若需扩展 equals 逻辑,应谨慎使用
getClass() != obj.getClass()(保对称性),而非instanceof
其他方法简要说明
getClass() 是 final 方法,不可重写,用于获取运行时类型;clone() 需实现 Cloneable 接口并改为 public,但现代开发更倾向用构造器或 BeanUtils 复制,避免浅拷贝陷阱;finalize() 已废弃(Java 9+),不应依赖;wait()/notify() 属于线程协作底层机制,日常业务中极少直接调用。
立即学习“Java免费学习笔记(深入)”;

















