Objects.equals判空处理语法糖
先看一个例子:
package demo;
import java.util.Objects;
public class objectsUtilDemo {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = null;
System.out.println(o1.equals(o2));
System.out.println(Objects.equals(o1, o2));
System.out.println(o2.equals(o1));
}
}
打印结果如下:
false
false
Exception in thread "main" java.lang.NullPointerException
at demo.objectsUtilDemo.main(objectsUtilDemo.java:12)
第12行的空指针异常其实是个很明显的错误,但在实际开发中很容易出现,因为像o2这个对象很可能是经过复杂处理的返回(比如是一个方法的返回值,或者某个第三方库的方法值),不是像例子中这么明显,于是就很容器忽略null对象调用equals方法肯定空指针异常的问题。
而Objects.equals就提供了一个判空的封装(语法糖),来让我们不必考虑o2以及o1是否为空,直接返回是否相等。看下源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
非常简短优雅:
- a==b,a和b都可以为null;
- a != null && a.equals(b) 排除了a为null的情况。