1. 非空判断的意义:
防止 NPE(空指针异常NullPointerException),是程序员的基本修养,编码时要记得加非空校验,在确保对象不为null时再进行下一步,这样可以避免NPE。
2.非空判断如何做:
我们从一个简单的用例开始。在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException:
String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();
在这个小示例中,如果我们需要确保不触发异常,就得在访问每一个值之前对其进行明确地检查:
if (user != null) {
Address address = user.getAddress();
if (address != null) {
Country country = address.getCountry();
if (country != null) {
String isocode = country.getIsocode();
if (isocode != null) {
isocode = isocode.toUpperCase();
}
}
}
}
你看到了,这很容易就变得冗长,难以维护。
1) if判断
这个最直接,很多人应该都是这么用的:
public static void main(String[] args) {
Object obj=null;
if(obj!=null)
{
System.out.println("执行接下来的代码");
}
}
2) Objects.requireNonNull(obj)
public static void main(String[] args) {
Object obj=null;
Objects.requireNonNull(obj);
// 如果传入的参数为null,则在抛出的异常中会显示为以下内容:
// Exception in thread "main" java.lang.NullPointerException: 参数不能为空
Objects.requireNonNull(obj,"参数不能为空");
System.out.println("执行接下来的代码");
}
3) Optional
Opitonal类就是Java8提供的非空判断,同时Optional的存在可以让代码更加简单,可读性跟高,代码写起来更高效。
如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法:
public static void main(String[] args) {
Object obj=null;
// Optional.ofNullable - 允许传递为 null 参数
// 以下代码正常输出
System.out.println(Optional.ofNullable(obj).orElse("obj 为 null"));
System.out.println("执行接下来的代码1");
// Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
// 以下代码会报异常
System.out.println(Optional.of(obj).orElse("null null"));
System.out.println("执行接下来的代码2");
}