一、💡 一句话理解
核心结论
Object是所有 Java 类的根父类;Objects是操作对象的静态工具类。
记忆:Object 是祖先,Objects 是工具箱。
二、🧭 理论:它们是什么
2.1 Object
java.lang.Object 位于类继承体系的最顶层,所有类都直接或间接继承它。
它提供对象共有的实例方法,例如:
equals():判断对象是否相等;hashCode():生成哈希值;toString():返回对象的字符串表示;getClass():获取运行时类型。
相关知识:3.== 和 equals 的区别、hashcode。
2.2 Objects
java.util.Objects 是一个 final 工具类,主要提供静态方法:
Objects.equals(a, b):允许参数为null,避免直接调用a.equals(b)时出现空指针;Objects.requireNonNull(obj):要求对象不能为null,否则抛出NullPointerException;Objects.hash(...):根据多个值计算哈希值。
| 对比项 | Object | Objects |
|---|---|---|
| 定位 | 根父类 | 工具类 |
| 包名 | java.lang | java.util |
| 使用方式 | 对象调用实例方法 | 通过类名调用静态方法 |
| 能否创建对象 | 可以 | 不能直接创建 |
三、⚙️ 理论:核心区别
String a = null;
String b = "Java";
// a 为 null,直接调用实例方法会抛出 NullPointerException。
// a.equals(b);
// Objects.equals:先处理 null,再比较两个对象。
boolean same = Objects.equals(a, b); // falseObjects.equals(a, b) 大致可以理解为:两者是同一引用就返回 true;否则只有 a 不为 null 时才调用 a.equals(b)。
四、🚀 实践:从准备到验证
4.1 前置准备
只需要 JDK,不需要第三方依赖。
4.2 可以拿来干什么
- 重写实体类行为时,使用
Object定义的equals()、hashCode()、toString(); - 比较可能为
null的对象时,使用Objects.equals(); - 在构造方法或参数入口处,使用
Objects.requireNonNull()提前阻止非法空值。
4.3 完整实践:代码、启动和验证
新建 ObjectAndObjectsDemo.java:
import java.util.Objects;
public class ObjectAndObjectsDemo {
public static void main(String[] args) {
String first = null;
String second = "Java";
// Objects.equals:即使 first 为 null,也不会抛出空指针异常。
System.out.println(Objects.equals(first, second)); // false
// requireNonNull:对象为 null 时立即抛出带提示信息的异常。
Objects.requireNonNull(second, "second 不能为 null");
// toString 来自 Object;String 对它进行了重写。
System.out.println(second.toString()); // Java
}
}运行:
javac ObjectAndObjectsDemo.java
java ObjectAndObjectsDemo预期输出:
false
Java五、🎤 面试时怎么流利地说
5.1 回答路线
先说定位,再说调用方式,最后举 Objects.equals() 的判空例子。
5.2 30 秒标准回答
Object是 Java 所有类的根父类,提供equals、hashCode、toString等实例方法。Objects是java.util包中的工具类,提供操作对象的静态方法,例如Objects.equals可以安全比较可能为null的对象,requireNonNull可以校验对象不能为空。简单说,Object是继承体系的基础,Objects是辅助操作对象的工具箱。
六、📌 总结
Object:所有类的根父类。Objects:静态工具类。a.equals(b)中a不能为null;Objects.equals(a, b)可以安全处理null。