是否有必要在java中显式实例化数组?

时间:2016-10-13 20:16:03

标签: java arrays object

实例化如何在此代码中起作用:

// decleration
dataType[] arrayRefVar;

//instantiation - is it required?
arrayRefVar = new dataType[arraySize];   //A

arrayRefVar[0]=1;  //B
arrayRefVar[1]=2;

我来自C ++背景,因此我不太了解使用'new'创建对象/数组。我知道它是为数组分配内存并返回引用。如果跳过A行,是否会自动在B处创建数组?

修改:如果有兴趣,请找一个类似的: Array initialization syntax when not in a declaration

2 个答案:

答案 0 :(得分:2)

这只是引用(指针)声明,但不是对象创建

// decleration
dataType[] arrayRefVar;

new 关键字指定必须创建给定Type的新内存位置。此步骤是您的实际对象创建而不是上述步骤。您将名为 arrayRefVar 的引用指向新创建的对象。

//instantiation -
arrayRefVar = new dataType[arraySize];   //A

如果没有第2步,您将获得NullPointerException。意图尝试将值分配给不存在的对象

答案 1 :(得分:0)

不会。 在创建数组时,java虚拟机分配了所需的空间。

编译器执行此操作是因为关键字new

dataType[] arrayRefVar;



arrayRefVar[0]=1;  //B
arrayRefVar[1]=2;
实质上,此代码将尝试访问用于其他/未使用的数据地址(arrayRefVar[0])。

初始化数组会分配这些地址。