原始数据类型的数组可以实例化吗?

Can array of primitive data type be instantiated?

在java中创建一个class的数组时,需要三个步骤:声明、实例化和初始化。 但是在创建原始数据类型数组时,new关键字是实例化还是初始化?

我发现它令人困惑,因为在许多地方实例化一词仅用于 class/classes 的数组。所以,我想知道实例化步骤是否也用于 PRIMITIVE 数据类型的数组。或者,是不是整个初始化数组的语句如下所示

int intArray[];    //declaring array
intArray = new int[20];  // allocating memory to array

在 Java 中,当我们实例化一个原始数组(如 new int[10])时,数组中的项目将使用该原始数组的默认值进行初始化。 (int 的默认值为 0boolean 的默认值为 false 等)

当我们实例化一个对象数组(例如String数组)时,数组中的项目被初始化为null

参见下面的程序及其输出。

public class PrimitiveArray
{
  public static void main(String[] args)
  {
    int[] intArray = new int[10];
    boolean[] booleanArray = new boolean[10];
    String[] stringArray = new String[10];

    System.out.println("intArray[3] = " + intArray[3]);
    System.out.println("booleanArray[3] = " + booleanArray[3]);
    System.out.println("stringArray[3] = " + stringArray[3]);
  }
}

输出为:
intArray[3] = 0
booleanArray[3] = false
stringArray[3] = null

Can array of primitive data type be instantiated?

是的。

Does the new keyword in new int[20] instantiate or initiate?

在那个例子中,它既实例化原始数组,又初始化1到原始类型的 default 值;即对于原始数字类型的数组为零,对于 boolean.

的数组为 false

另一方面:

int intArray[];

声明一个数组变量,既没有初始化变量,也没有实例化数组。如果那是局部变量声明,编译器将不允许您使用该变量,直到它被分配给。如果是字段,那么变量会默认初始化为null;即没有数组被实例化。

Java 不允许程序访问未初始化的变量或数组元素,无论是显式初始化还是通过 default 初始化。这是语言的基础属性。


1 - 正确的术语是 initialize 而不是 initiate。 Initiate(英文)的意思是“开始”(例如一个动作或过程)或“承认(某人)进入一个秘密或隐蔽的社会或团体,通常是通过仪式。”。这不是本文中的正确含义。