java 中 objects 工具类通过 equals()、deepequals() 和 compare() 方法安全比较对象,这些方法内部处理了 null 值检查,避免了空指针异常。使用 equals() 比较常规对象,deepequals() 比较数组内容,compare() 支持可空值的排序比较。

Objects.equals() 如何避免空指针异常
Objects.equals() 方法在比较两个对象时,会先检查参数是否为 null,从而避免调用 null.equals() 导致的 NullPointerException。如果两个参数都为 null,则返回 true;如果一个为 null 另一个不为 null,则返回 false;否则调用第一个参数的 equals() 方法进行逻辑比较。

import java.util.Objects;
public class SafeComparison {
public static void main(String[] args) {
String a = null;
String b = "test";
// 安全比较,不会抛出异常
boolean result = Objects.equals(a, b);
System.out.println("Result: " + result); // false
String c = null;
String d = null;
boolean result2 = Objects.equals(c, d);
System.out.println("Result2: " + result2); // true
}
}
Objects.deepEquals() 如何比较数组内容
Objects.deepEquals() 专门用于比较数组类型的对象,它会递归地比较数组中的每个元素,包括嵌套数组。对于非数组类型,它退化为普通的 equals() 比较。这对于需要比较复杂数据结构(如二维数组或包含对象的数组)的场景非常有用。

import java.util.Objects;
public class DeepArrayComparison {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 4};
// 比较数组内容而非引用
boolean result1 = Objects.deepEquals(arr1, arr2);
System.out.println("Deep Equals (same content): " + result1); // true
boolean result2 = Objects.deepEquals(arr1, arr3);
System.out.println("Deep Equals (different content): " + result2); // false
// 普通 equals 比较的是引用
boolean result3 = arr1.equals(arr2);
System.out.println("Normal Equals (reference): " + result3); // false
}
}
基于 Objects.compare() 的可空值排序比较
Objects.compare() 方法允许使用自定义的 Comparator 来比较两个对象,并且能够处理 null 值。当其中一个或两个参数为 null 时,它会根据比较器的行为返回相应的结果,这使得它在需要对可能包含 null 值的集合进行排序或比较时非常有用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











