【问题标题】:Can array of primitive data type be instantiated?可以实例化原始数据类型的数组吗?
【发布时间】:2019-01-07 13:22:42
【问题描述】:

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

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

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

【问题讨论】:

  • 好吧,从我的角度来看,你怎么称呼它,if you will make instance of class, then you are doing initialization of an object,你无论如何都需要分配内存。所以,从理论上和纯粹的抽象层面上,我会说,它在这种情况下都是如此。我不认为有任何共同或正确的答案。
  • 一个数组类型始终是一个对象,即使它的组件类型是一个基元,参见JLS, chapter 10

标签: java arrays primitive abstract-data-type


【解决方案1】:

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

是的。

new int[20] 中的 new 关键字是实例化还是初始化?

在该示例中,它既实例化原始数组,又初始化1默认值原始类型;即原始数值类型数组为零,false 数组boolean

另一方面:

int intArray[];

声明一个数组变量,而不是初始化变量,或者实例化一个数组。如果这是一个局部变量声明,编译器不会让你使用该变量,直到它被分配。如果是字段,那么变量会默认初始化为null;即没有实例化数组。

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


1 - 正确的术语是 initialize 而不是 initiate。 Initiate(英文)的意思是“开始”(例如一个动作或过程)或“允许(某人)进入一个秘密或不为人知的社会或团体,通常通过仪式。”。在这种情况下,这不是正确的含义。

【讨论】:

    【解决方案2】:

    在 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

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      相关资源
      最近更新 更多