实例化如何在此代码中起作用:
// 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
答案 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]
)。
初始化数组会分配这些地址。