零长度数组的目的是什么。它们是否有用或者只是因为语法允许?
答案 0 :(得分:34)
如果你有一个接受数组的函数,并且你想给它一个没有任何内容的数组,你传递一个零长度的数组。
如果您从外部源读取数组,并且它恰好没有任何项目,您将获得零长度数组。
答案 1 :(得分:11)
假设您在Java中的意思是,您可以毫无问题地迭代零长度数组,但如果变量设置为null
则无法执行此操作。
String[] myArr = new String[0];
for (String str : myArr) {
// do something here
}
如果您将myArr
设置为null
,则会在此循环中获得NullPointerException
。
答案 2 :(得分:6)
没有理由不允许零长度数组并支持它们避免特殊情况下的许多事情。
例如:如果定义如下的方法,编译器应该传递给varArg
:
public void foo(String arg1, String... varArg);
像这样调用:
foo("bar");
此外,"".toByteArray("UTF-8")
的返回值是什么?
禁用零长度数组会使语言复杂化,同时增加很少的优势。
答案 3 :(得分:4)
它们可以让您保持API一致,同时避免使用空值。例如,假设您有一个返回某个数组的方法。如果没有有效结果,则返回零长度数组。相反,如果您被迫返回null来发出信号,那么客户端代码必须以不同的方式处理这两种情况。使用零长度数组,以下代码仍可正常工作:
for (int i = 0; i < array.length; i++) {
// do something with the array entries
}
如果array.length == 0,则永远不会输入循环体。
答案 4 :(得分:1)
如果前提条件是数组始终存在,则避免必须检查null。
答案 5 :(得分:0)
没有方法,成员或行为的对象的目的是什么?数组只是指向连续内存块的指针,因此0是有效长度。