数组补充

声明数组是在栈里//int[] array=null;

创建数组是在堆里//arry=new int[10];

在Java中,数组是一种引用类型。创建一个数组时,需要分配内存来存储数组元素。

假设我们要创建一个包含3个整数的数组:

int[] array = new int[3];

上述代码将在内存中创建一个名为 array 的变量来引用数组对象。数组对象本身是在堆(Heap)上分配的。

内存示意图如下所示:

          +-----+
array --> |     |
        +-----+

此时,数组还没有被初始化,每个元素的值都为默认值(0)。在堆上将为数组分配连续的内存空间,可以通过下标访问数组元素。

接下来,我们为数组的每个元素赋值:

java复制代码array[0] = 10;
array[1] = 20;
array[2] = 30;

内存示意图更新如下:

          +-----+
array --> | * |
        +-----+
          |10 |
        +-----+
          |20 |
        +-----+
          |30 |
        +-----+

现在,数组的每个元素都有了具体的值。

请注意,数组的索引从0开始,因此 array[0] 表示第一个元素, array[1] 表示第二个元素,以此类推。

当我们使用数组时,可以通过数组名和索引访问特定的元素。例如,array[1] 的值为20。

需要注意的是,数组的内存分配是连续的,这意味着所有元素都存储在相邻的内存位置上。这也使得通过索引访问元素的操作效率较高。

在Java中,声明一个数组变量时,变量本身(即引用)存储在栈内存中。例如,int[] array = null; 中的 array 变量存储在栈内存中。此时,array 变量还没有指向任何有效的数组对象,因此它被初始化为 null

接下来,当我们使用 new 关键字创建一个具体大小的数组时,数组对象将在堆内存中动态分配。

例如,array = new int[10]; 将在堆内存中分配一个包含10个整数的数组对象,并将 array 变量指向该数组对象。

内存示意图如下所示:

          +-----+
array --> |     |
         +-----+
          ...
         +------+
array --> |  *   |
         +------+
           |0   |
         +------+
           |0   |
         +------+
            ...
         +------+
           |0   |
         +------+

现在,array 变量指向新创建的数组对象,数组的每个元素都被初始化为默认值(在这种情况下为0)。

需要注意的是,在 Java 中,基本类型数组(如 int[])和对象数组(如 String[])的工作原理是相同的。它们都在堆内存中进行动态分配。

数组的四个基本特点

数组的长度是确定的,数组一旦被创建,它的大小就是不可以改变的。

其元素必须是相同类型,不允许出现混合类型。

数组中的元素可以是任何数据类型,包括基本类型和引用类型。

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

  1. 数组的长度是确定的,并且一旦创建后,其长度是不可改变的。在创建数组时需要指定其长度,然后无法动态调整数组的大小。

  2. 数组中的元素必须是相同的类型,不允许出现混合类型。例如,创建一个整数数组,其中的每个元素都必须是整数类型。

  3. 数组中的元素可以是任何数据类型,可以是基本类型(如整数、浮点数等)或引用类型(如对象、字符串等)。

  4. 数组变量是引用类型,它指向堆内存中的数组对象。因此,数组本身是在堆内存中创建和存储的。

posted @ 2023-06-26 22:26  r7ftf  阅读(14)  评论(0)    收藏  举报