对于 Objects,我们经常使用的就是两个场景,相等判断和判空。

相等判断

Objects 有提供 equals() 和 deepEquals() 两个方法来进行相等判断。
前者是判断基本类型和自定义类的,不能用于判断数组。
后者是判断数组的,既可以判断一维数组,又可以判断多维数组,包含基本数据类型和引用数据类型。
equas() 的底层实现源码如下:

  1. public static boolean equals(Object a, Object b) {
  2. // 如果传入的参数对应的类重写了 equals(),将调用重写的 equals()
  3. return (a == b) || (a != null && a.equals(b));
  4. }

deepEquals() 的底层实现源码如下:

  1. public static boolean deepEquals(Object a, Object b) {
  2. if (a == b)
  3. return true;
  4. else if (a == null || b == null)
  5. return false;
  6. else
  7. return Arrays.deepEquals0(a, b);
  8. }

为空判断

isNull() 和 nonNull() 对于对象是否为空返回 Boolean 值。
requireNonNull() 更加严格,如果一旦为空,会直接抛出异常,我们需要根据场景选择使用。

  1. public static boolean isNull(Object obj) {
  2. return obj == null;
  3. }
  4. public static boolean nonNull(Object obj) {
  5. return obj != null;
  6. }
  7. public static <T> T requireNonNull(T obj) {
  8. if (obj == null)
  9. throw new NullPointerException();
  10. return obj;
  11. }
  12. public static <T> T requireNonNull(T obj, String message) {
  13. if (obj == null)
  14. throw new NullPointerException(message);
  15. return obj;
  16. }