一般用JDK提供的基础工具类 Objects 判断即可。
1、Objects.isNull
//Test类中定义 静态成员变量
private static Student stu;
public static void main(String[] args) {
// new后分配了内存地址,即变为非空。就像有个瓶子,但是没有水。
Student student1 = new Student();
boolean flag = Objects.isNull(stu);
System.out.println("flag = " + flag);
boolean flag1 = Objects.isNull(student1);
System.out.println("flag1 = " + flag1);
}
//输出
flag = true
flag1 = false
2、Objects.requireNonNull
若入参 object 为 null ,抛出自定义message的空指针异常:NullPointerException(message)
private static Student stu;
public static void main(String[] args) {
Objects.requireNonNull(stu,"入参对象为空");
Student student1 = new Student();
boolean flag = Objects.isNull(stu);
System.out.println("flag = " + flag);
}
//输出
Exception in thread "main" java.lang.NullPointerException: 入参对象为空
at java.util.Objects.requireNonNull(Objects.java:228)
at com.xiexie.demo.Test.main(Test.java:22)
3、Objects类 方法解析
私有构造,final 修饰
可以看到除了构造器,其他的全是静态方法。requireNonNull、toString 有重载方法
(1)compare
Comparator<? super T> c 是函数式接口(一般是直接new一个匿名内部类或用Lambda 表达式)
(2)deepEquals
会调用Arrays.deepEquals()方法,比较多维数组是否深层相等。
(3)equals
|| 后会调用Object类的equals方法。
(4)hash
入参 Object... 【...】表示可变长度参数列表,或者是一个该类型的数组。在
Arrays.hashCode里面最终会调用Object类的hashCode方法。
(5)hashCode
单个Object入参,直接调用Object类的hashCode方法。
(6)isNull
(7)nonNull
(8)requireNonNull
泛型方法。若为null,直接抛出空指针;若非空,返回原来的对象。
若有异常,自定义信息message。
重载方法,有Supplier 参数(函数式接口)。
(9)toString
底层调用 String 类的 valueOf 静态方法。
String为空,有默认值的重载方法。