那些情况会导致操作字符串 数组和集合时出现Java空指针

场景复现

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行抛出了错误:
那些情况会导致操作字符串 数组和集合时出现Java空指针



为什么add()可以添加null,但是addAll不可以?

因为add()只是将对象进行了赋值存储
那些情况会导致操作字符串 数组和集合时出现Java空指针
但是addAll()调用了对象的方法
那些情况会导致操作字符串 数组和集合时出现Java空指针
因此后者会引发空指针异常,但是前者不会

此处可参考总结Java NullPointerException 异常出现情况,以及如何从根源上避免空指针异常 提到的第一种情况



上一篇文章 那些情况会导致赋值时自动拆箱出现空指针,以及如何避免这些情况

上一篇:如何优雅的开发一个时钟(QT篇)


下一篇:Qt绘图:4种绘制背景模式