Object[] args = new Object[0];
我在调试时在我的代码库中遇到了这段代码。
稍后的某个地方有另一个这样的声明:
args = new Object[10] ;
问题 :
- 为什么有人要初始化一个长度为零的数组?
- 为什么代码不能只是:
Object[] args
然后到时候args = new Object[10]
。创建长度为零的数组有什么意义吗?
Object[] args = new Object[0];
我在调试时在我的代码库中遇到了这段代码。
稍后的某个地方有另一个这样的声明:
args = new Object[10] ;
问题 :
Object[] args
然后到时候args = new Object[10]
。创建长度为零的数组有什么意义吗?它只是创建大小为 0 的数组。很可能是为了在某处防止 NullPointerException。下一个赋值丢弃前一个数组并将大小为 10 的新数组分配给同一个变量。
这是一个空数组的声明。如果您不想在输入 for 或纯 foreach 循环之前检查空值,这很有用。
这是一个规范的对象数组声明和初始化。第一行args
用一个新的 0 元素数组初始化变量。第二个使用 10 个元素的新数组重新初始化变量。
使用空数组,您可以使用高级 for 循环安全地迭代数组。而且您不必检查是否为空。
Object[] array = new Object[0];
for(Object arg:array)
{
//It never enters here
}
所以下次你用Object[] array = new Object[10]
这个循环分配它时可以迭代它。
通常这种类型的编码是在您初始化数组时不知道数组的实际大小(在您的情况下为 args)时完成的。数组的大小在运行时决定。这就是为什么在初始化时它的大小保持为 0。稍后,在编程中,当您了解数组的实际大小时,它会重新初始化。
这将创建一个具有零个槽的数组对象。
Object[] args = new Object[0];
然后,这会将 args 设置为具有 10 个持有人的 Object 数组,在您将某些内容放入其中之前,所有这些都将是空白的。
args = new Object[10] ;
Object[]
是 Java 中“对象数组”的一个对象。数组是 Java 中的特殊对象。因此,您将args分配给另一个对象,该对象的索引最初具有 null 值。
“创建一个长度为零的数组有什么意义吗?”
new Object[0] 是一个空的对象数组。
这就像在需要之前将 int 初始化为零。初始值在第二次赋值时被丢弃args = new Object[10] ;
好的,这是我对这如何有用的看法:
当你想像这样使用 for 循环时:
for(Object arg:args){
// do something with arg
}
而且你没有事先初始化它,编译器会给你一个错误,说 args 可能没有被初始化。
但是,如果将 args 初始化为 null,则会出现空指针异常。
相反,如果它是new Object[0]
, args.length = 0, args 不为空,则循环正确地甚至不会执行一次。
这只是防御性编码,可能没有必要。同样的想法似乎常常导致这样的结果:
String line = "";
while ((line = in.readLine()) != null)
{
// ...
}
这绝对是不必要的。