我是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。我错过了一些东西,还是我犯了一些不同的错误?
答案 0 :(得分:6)
创建对象数组时,实际上需要2个步骤
第一种方法同时执行两种方法,而第二种方法只执行第一种方法,因此对实际对象的引用为null
。
Object[] objects = {new Object(),new Object(),new Object()};
此处{...}
创建数组,内部new
创建对象。
Object[] objects = new Object[3];
此处new
创建大小为3的数组。但是不创建单个元素,例如object[0]
,因此引用为null
,这会导致异常。
答案 1 :(得分:2)
您的第一行代码会创建三个Object
来填充数组。
你的第二行代码会创建一个空数组并且永远不会填充它,因此它仍然充满null
。
答案 2 :(得分:1)
第二个版本Object[] objects = new Object[3];
创建一个大小为3的数组,但这些对象不存在,它们为空。
第一个,Object[] objects = {new Object(),new Object(),new Object()};
在创建数组的同时显式创建对象,因此您可以访问它们
答案 3 :(得分:0)
如果你想以第二种方式做,你可以试试这个:
SomeObject[] objectArray = new SomeObject[3];
objectArray[0] = new SomeObject(); //create SomeObject
objectArray[0].setValue(10); //give SomeObject the value of 10