3
Object[] args = new Object[0];

我在调试时在我的代码库中遇到了这段代码。

稍后的某个地方有另一个这样的声明:

args = new Object[10] ;

问题 :

  1. 为什么有人要初始化一个长度为零的数组?
  2. 为什么代码不能只是:Object[] args然后到时候args = new Object[10]。创建长度为零的数组有什么意义吗?
4

10 回答 10

2

它只是创建大小为 0 的数组。很可能是为了在某处防止 NullPointerException。下一个赋值丢弃前一个数组并将大小为 10 的新数组分配给同一个变量。

于 2012-10-05T05:48:52.050 回答
1

这是一个空数组的声明。如果您不想在输入 for 或纯 foreach 循环之前检查空值,这很有用。

于 2012-10-05T05:49:08.117 回答
1

这是一个规范的对象数组声明和初始化。第一行args用一个新的 0 元素数组初始化变量。第二个使用 10 个元素的新数组重新初始化变量。

于 2012-10-05T05:48:39.183 回答
0

使用空数组,您可以使用高级 for 循环安全地迭代数组。而且您不必检查是否为空。

     Object[] array = new Object[0];
     for(Object arg:array)
     {
         //It never enters here
     }

所以下次你用Object[] array = new Object[10]这个循环分配它时可以迭代它。

于 2012-10-05T05:58:58.287 回答
0

通常这种类型的编码是在您初始化数组时不知道数组的实际大小(在您的情况下为 args)时完成的。数组的大小在运行时决定。这就是为什么在初始化时它的大小保持为 0。稍后,在编程中,当您了解数组的实际大小时,它会重新初始化。

于 2012-10-05T05:51:33.377 回答
0

这将创建一个具有零个槽的数组对象。

Object[] args = new Object[0];

然后,这会将 args 设置为具有 10 个持有人的 Object 数组,在您将某些内容放入其中之前,所有这些都将是空白的。

args = new Object[10] ;
于 2012-10-05T05:48:58.100 回答
0

Object[]是 Java 中“对象数组”的一个对象。数组是 Java 中的特殊对象。因此,您将args分配给另一个对象,该对象的索引最初具有 null 值。

“创建一个长度为零的数组有什么意义吗?”

  • 不,它只是用于初始化args变量,这可能会阻止您收到一些编译器警告。
于 2012-10-05T05:49:04.170 回答
0

new Object[0] 是一个空的对象数组。

这就像在需要之前将 int 初始化为零。初始值在第二次赋值时被丢弃args = new Object[10] ;

于 2012-10-05T05:49:18.003 回答
0

好的,这是我对这如何有用的看法:

当你想像这样使用 for 循环时:

for(Object arg:args){
    // do something with arg
}

而且你没有事先初始化它,编译器会给你一个错误,说 args 可能没有被初始化。

但是,如果将 args 初始化为 null,则会出现空指针异常。

相反,如果它是new Object[0], args.length = 0, args 不为空,则循环正确地甚至不会执行一次。

于 2012-10-05T05:55:00.940 回答
0

这只是防御性编码,可能没有必要。同样的想法似乎常常导致这样的结果:

String line = "";
while ((line = in.readLine()) != null)
{
  // ...
}

这绝对是不必要的。

于 2012-10-05T06:42:28.930 回答