Objects 类常用方法源码剖析(基于 Java 11)
Objects 类是 Java 7 引入的一个工具类,包含一系列静态方法,用于对象操作、空指针检查、哈希计算等常见操作。这些方法大多是空指针安全的(null-safe),在设计上有助于减少冗长的空值检查代码,提高代码健壮性和可读性。本文将结合 Java 11 源码,剖析 Objects 类的常用方法。
1. Objects 类概述
Objects 类位于 java.util
包中,是一个不可实例化的工具类(final 类,私有构造器抛出 AssertionError)。
public final class Objects {
private Objects() {
throw new AssertionError("No java.util.Objects instances for you!");
}
// 静态方法...
}
它不同于 java.lang.Object
:Object 是所有类的超类,而 Objects 是操作对象的工具类。
2. 常用方法源码剖析
2.1 equals(Object a, Object b)
源码实现:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
功能说明:
比较两个对象是否相等。它是空指针安全的。
代码分析:
- 首先使用
==
比较,如果引用相同(包括都为null
)则直接返回true
。 - 如果第一个参数
a
不为null
,则调用a
的equals
方法进行内容比较。 - 避免了直接调用
a.equals(b)
可能导致的NullPointerException
。
示例:
String s1 = null;
String s2 = "hello";
// 不会抛出 NullPointerException
boolean result = Objects.equals(s1, s2); // 返回 false
2.2 deepEquals(Object a, Object b)
源码实现:
public static boolean deepEquals(Object a, Object b) {
if (a == b)
return true;
else if (a == null || b == null)
return false;
else
return Arrays.deepEquals0(a, b);
}
功能说明:
用于“深度比较”两个对象,尤其适用于数组。如果两个数组的元素逐个深度相等,则数组本身深度相等。
代码分析:
- 先进行引用比较和
null
检查。 - 若两者均非
null
,则调用Arrays.deepEquals0
进行深度比较。该方法会递归比较数组中的元素。
示例:
int[] a1 = {
1, 2, 3};
int[] a2 = {
1, 2, 3}