对于 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;elsereturn 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;}
