游瞠离 发表于 2025-6-24 13:39:23

Java中初始化固定大小List的两种方式对比——别让null对象害你NullPointerException

//方法1
int fixedSize = 5;
List<RcGroupConfEntity> list = new ArrayList<>();

// 初始化固定个数的对象并放入 list2
for (int i = 0; i < fixedSize; i++) {
    RcGroupConfEntity entity = new RcGroupConfEntity();
    list2.add(entity);
}

//方法2
List<RcGroupConfEntity> list = new ArrayList<>(Arrays.asList(new RcGroupConfEntity));
的区别  最开始我使用的是第二种,但是一直 list.get(i).setxxx报错,我纳闷了, 我对象有的啊,为啥还是给我报错???
 
在 Java 开发中,我们经常需要初始化一个固定大小的 List,比如用于占位、批量处理等场景。然而,很多开发者在使用 Arrays.asList(new T) 初始化 List 时,会不小心踩坑,导致后续调用 .setXXX() 方法时出现空指针异常。
本文将通过代码示例,详细对比以下两种初始化方式的区别:

[*]使用循环逐个添加新对象(推荐)
[*]使用数组转换成 List(快捷但有陷阱)
一、方式一:循环添加对象(推荐)

int fixedSize = 5;
List<RcGroupConfEntity> list2 = new ArrayList<>();

for (int i = 0; i < fixedSize; i++) {
    RcGroupConfEntity entity = new RcGroupConfEntity();
    list2.add(entity);
}✅ 特点:
特性描述每个元素都是真实存在的对象✅ 可以直接调用 .setXXX() 方法安全性高✅ 不会出现空指针异常灵活性好✅ 可根据索引或逻辑动态构造不同对象示例:为每个对象赋初始值

for (int i = 0; i < fixedSize; i++) {
    RcGroupConfEntity entity = new RcGroupConfEntity();
    entity.setGroupName("组" + (i + 1));
    list2.add(entity);
}二、方式二:数组转 List(快捷写法)

List<RcGroupConfEntity> list2 = new ArrayList<>(
    Arrays.asList(new RcGroupConfEntity)
);❌ 注意事项:
特性描述所有元素初始为 null❌ 调用 .get(i) 返回 null本质是一个“装箱”操作✅ 把一个数组包装成 List适合占位/预分配⚠️ 但需要后续手动填充对象❌ 使用时容易出错:

list2.get(0).setPersonConfList(...); // ❌ NullPointerException因为 list2.get(0) 是 null。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Java中初始化固定大小List的两种方式对比——别让null对象害你NullPointerException