Java--- 关于 数组为null和长度为0的区别

Java--- 关于 数组为null和长度为0的区别

在做LeetCode 的时候,想到一个问题。

数组为null和长度为0,有区别吗?返回 null 会不会导致调用者 空指针异常?

首先来看

int[] n;        //只声明了一数组变量;                              
int[] nil = null;   //声明一数组变量,并赋值 null,nil是一个数组类型的空引用,不指向任何对象;                             
int[] zero = new int[0];  //声明并创建一数组对象,长度是0;

对于上面三条语句,一个比一个做的动作多,系统占用也是后面的多:

  • 语句一变量还没初始化,打印 n 会出错:“可能尚未初始化变量 n”;
  • 语句二虽已初始化,打印“nil.length”会出现异常:NullPointerException;
  • 语句三打印“nil.length”是0,数组内还没有元素。

​ 假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对放回数组进一步处理,而如果返回空数组,则无须null引用检查。鉴于此,返回数组的方法在没有结果时我们通常返回空数组,而不是null,这样做对于函数调用者的处理比较方便。

翻阅《阿里巴巴Java开发手册》,可以看到以下内容:

image-20200827132352519

调用者需要对 null 进行判断,都在会抛出空指针异常。


当然也可以返回值为空的对象,但是需要结合考虑性能问题。

《Effective Java (Third Edition)》书中表示:返回长度为零的数组或者集合,而不是null。

参考博文: https://blog.csdn.net/Rex_WUST/article/details/88763632

posted @ 2020-08-27 13:32  L1ng14  阅读(740)  评论(0)    收藏  举报