对于 Objects,我们经常使用的就是两个场景,相等判断和判空。
相等判断
Objects 有提供 equals() 和 deepEquals() 两个方法来进行相等判断。
前者是判断基本类型和自定义类的,不能用于判断数组。
后者是判断数组的,既可以判断一维数组,又可以判断多维数组,包含基本数据类型和引用数据类型。
equas() 的底层实现源码如下:
public static boolean equals(Object a, Object b) {
// 如果传入的参数对应的类重写了 equals(),将调用重写的 equals()
return (a == b) || (a != null && a.equals(b));
}
deepEquals() 的底层实现源码如下:
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);
}
为空判断
isNull() 和 nonNull() 对于对象是否为空返回 Boolean 值。
requireNonNull() 更加严格,如果一旦为空,会直接抛出异常,我们需要根据场景选择使用。
public static boolean isNull(Object obj) {
return obj == null;
}
public static boolean nonNull(Object obj) {
return obj != null;
}
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}