ArrayList可以为null并且大小为> 0?

时间:2015-04-21 22:29:28

标签: java

我正在审核Java项目并看到以下代码:

List<XYZ> xyzList = new ArrayList<>();

............................
do some things with the list
............................

if (xyzList != null && xyzList.size() > 0) doSomething();

是否存在列表可以为null但大小大于0的情况?或者这是多余的,等同于if (xyzList.size() > 0)

编辑:xyzList可以从外部类修改,因此绝对需要进行空检查。感谢您的回复,我度过了漫长的一天,我的思绪无法正常运作。

6 个答案:

答案 0 :(得分:11)

代码确保xyzList在调用size()之前不为空,这将导致崩溃/异常。 由于短路评估,当size()为空时,if子句中不会调用xyzList

答案 1 :(得分:2)

对象必须存在才能取消引用任何内容。这就是使用空值检查得到的结果:我们希望确保{/ 1}}存在之前我们开始对其进行任何操作。

那就是说,根据宣布的地点,这项检查可能是无聊的。

如果您在声明为xyzList的字段上看到此内容,则可以将该字段视为急切初始化,并且因为它是final,您可以保证永远不会设置回null。

final

如果你在一个方法中看到这个,并且根本没有变量将它设置为空值,那么null检查是没有意义的,因为它再次 - 它不会改变它的生命周期方法

private final List<XYZ> xyzList = new ArrayList<>(); // guaranteed not null

这种模式是在不保证初始化的变量上完成的。如果您急切地初始化变量或字段,则无需执行此检查。

答案 2 :(得分:1)

如果do some things with the list不涉及将其设置为null,则空检查是多余的。一个好的IDE会在你打字并发出警告时发现它。

否则,null检查确保大小检查不会产生NullPointerException。

答案 3 :(得分:0)

我不确定是什么

............................
do some things with the list
............................

正在做,但我的猜测是&#34; xyzList!= null&amp;&amp; xyzList.size()&gt; 0&#34;因为你不想最终在空引用上调用方法而被一起调用。因此,它不是多余的

答案 4 :(得分:0)

数组列表不能为NULL&amp; 0同时。

但它并不意味着非空数组列表的大小始终为&gt; 0。  非空的数组列表也可以是0。

  • 在调用arrayList.size()之前,始终确保ArrayList不为null,以避免空指针异常。

示例:

if (workImageArrayList != null) {
    Toast.makeText(this, "size : " + workImageArrayList.size(), Toast.LENGTH_SHORT).show();
    //can show ---> size : 0, but its not null.
} else {
    Log.e("WorkImageArrayList", "" + workImageArrayList);
    //arraylist is null.
}

答案 5 :(得分:0)

此行构造一个新的空ArrayList对象,其大小为0,并使xyzList指针指向该对象。

List<XYZ> xyzList = new ArrayList<>();

当xyzList指针未指向任何对象时,它为null。

List<XYZ> xyzList;

因此,ArrayList可以为null或大小为&gt; 0,不是两个