0

我是 Java 新手,所以这可能是一个愚蠢的问题。假设我创建了一个名为 SomeObject 的类,其中包含一些参数的简单 getter 和 setter。接下来,我想创建一个包含该对象的 3 个实例的数组。谁能告诉我有什么区别:

SomeObject[] objectArray = {new SomeObject(),new SomeObject(),new SomeObject()};
objectArray[0].setValue(10);

和:

SomeObject[] objectArray = new SomeObject[3];
objectArray[0].setValue(10);

在第一种情况下,我可以很好地获得对象 [0] 的值:

System.out.println(objectArray[0].getValue());

..而后者在尝试设置值时会给出 NullPointerException 。我错过了什么,还是我犯了一些不同的错误?

4

4 回答 4

6

创建对象数组时,实际上需要 2 个步骤

  1. 创建数组
  2. 创建对象

第一种方法两者都做,而第二种方法只做第一步,因此对实际对象的引用是null.

Object[] objects = {new Object(),new Object(),new Object()};

这里{...}创建数组,内部new创建对象。

Object[] objects = new Object[3];

这里new创建了大小为 3 的数组。但是单个元素,例如object[0]未创建,因此引用为null,这会导致异常。

于 2013-08-09T15:59:49.090 回答
2

您的第一行代码创建了三个Objects 来填充数组。

您的第二行代码创建了一个空数组并且从不填充它,所以它仍然充满null.

于 2013-08-09T15:59:50.590 回答
1

第二个版本,Object[] objects = new Object[3];创建一个大小为 3 的数组,但对象不存在,它们为空。

第一个,Object[] objects = {new Object(),new Object(),new Object()};在创建数组的同时显式创建对象,因此您可以访问它们

于 2013-08-09T15:59:50.360 回答
0

如果你想用第二种方法,你可以试试这个:

SomeObject[] objectArray = new SomeObject[3]; 
objectArray[0] = new SomeObject(); //create SomeObject
objectArray[0].setValue(10); //give SomeObject the value of 10
于 2013-08-09T20:42:25.877 回答