2011-03-23 125 views
13

可能重复:
What is the usage of array of zero length?零长度数组

什么是零长度arrays.Are他们任何使用或就这样,因为这个语法允许的目的是什么?

+0

注意:由于零长度数组是不可变的,所以它们对于给定类型都是相等的,例如对于'int [0]',通常可以使用一个常数零。唯一的例外是,如果你已经使用零长度数组作为锁,但这是不好的主意恕我直言。 – 2011-03-23 13:55:09

回答

32

如果你有一个函数接受一个数组,并且你想给它一个没有任何东西的数组,你传递一个零长度的数组。

如果您从外部源读取数组,并且它恰好没有任何项目,您将得到一个零长度数组。

+7

使用这种方法意味着需要更少的空检查 – tofarr 2011-03-23 13:14:29

0

没有方法,成员或行为的对象的目的是什么?数组只是指向连续的内存块的指针,所以0是有效的长度。

6

没有理由不允许零长度数组和支持它们避免特殊情况下的许多事情。

例如:如果定义应编译器传递给varArg什么方法是这样的:

public void foo(String arg1, String... varArg); 

被称为像这样:

foo("bar"); 

而且,应该是什么的"".toByteArray("UTF-8")的返回值?

禁止零长度数组会使语言复杂化,同时增加很少的优势。

1

它避免了必须检查null是否前提条件是数组始终存在。

4

它们让您保持API一致,同时避免空值。例如,假设你有一个方法返回一些东西。如果没有有效的结果,你会返回一个零长度的数组。如果您不得不返回null来表示这个信号,那么客户端代码将不得不以不同的方式处理这两种情况。使用零长度数组,下列代码仍然有效:

for (int i = 0; i < array.length; i++) { 
    // do something with the array entries 
} 

如果array.length == 0,则循环的主体永远不会输入。

9

假设你的意思是在Java中,你可以在没有任何问题的情况下迭代零长度的数组,但是如果变量设置为null,你就不能这样做。

String[] myArr = new String[0]; 
for (String str : myArr) { 
    // do something here 
} 

如果设置myArrnull相反,你会得到在这个循环中的NullPointerException