场景复现
package com.github.ybqdren;
/**
* Wen(Joan) Zhao <withzhaowen@126.com>
* 2021/11/6
* <h1>字符串 数组 集合在使用时使用空指针</h1>
*/
public class BasicUsageNpe {
private static boolean StringEquals(String x,String y){
return x.equals(y);
}
public static class User{
public String name;
}
public static void main(String[] args){
}
}
第一种场景:字符串使用 equals 可能会报空指针错误
System.out.println(StringEquals("xyz",null));
System.out.println(StringEquals(null,"xyz"));
第二种场景:对象数组new出来,但是元素没有初始化
User[] users = new User[10];
for(int i=0;i != 10;i++){
users[i].name = "ybqdren-"+i;
}
第三种场景:向List对象addAll 传递null会抛出空指针
List<User> users = new ArrayList<User>();
User user = null;
List<User> users_ = null;
users.add(user);
users.addAll(users_);
在第37行抛出了错误:
为什么add()可以添加null,但是addAll不可以?
因为add()只是将对象进行了赋值存储
但是addAll()调用了对象的方法
因此后者会引发空指针异常,但是前者不会
此处可参考总结Java NullPointerException 异常出现情况,以及如何从根源上避免空指针异常 提到的第一种情况