char[] arrNew = new char[0];
System.out.println(arrNew.length); // length = 0
arrNew[0]='c'; // ArrayIndexOutOfBoundsException .
在上面的代码中,您可以清楚地看到大小为 0 的数组没有意义。据我所知,大小为 0 的数组没有实际用途。有人可以解释为什么编译器允许创建 0 长度数组。还有 0 长度数组与初始化为空的数组有何不同? (即,是否像普通数组一样分配给它的内存?)。如果这个问题看起来很愚蠢,我很抱歉。
我们可以从方法中返回一个空数组而不是 null,这称为 Null 对象设计模式。考虑以下代码
Person[] res = find(name);
for(String e : res) {
System.out.println(e);
}
如果 find() 没有找到任何人,它返回一个空数组。如果 find 返回 null,则代码需要将其视为特殊情况。
我们应该记住,空数组是不可变的,因此使用单例而不是每次都创建它是合乎逻辑的
private static final Person[] NULL = new Person[0];
Person[] find(String name) {
...
if (notFound) {
return NULL;
}
...