有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java初始化对象数组

我是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) 个答案

  1. # 1 楼答案

    第一行代码创建三个Object来填充数组

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

  2. # 2 楼答案

    如果您想使用第二种方法,可以尝试以下方法:

    SomeObject[] objectArray = new SomeObject[3]; 
    objectArray[0] = new SomeObject(); //create SomeObject
    objectArray[0].setValue(10); //give SomeObject the value of 10
    
  3. # 3 楼答案

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

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

    第一个方法同时执行这两个步骤,而第二个方法只执行第一步,因此对实际对象的引用是null

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

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

    Object[] objects = new Object[3];
    

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

  4. # 4 楼答案

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

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