整型数组初始化

我在这里有一个与Java相关的简单问题。假设您有一个 int 数组作为实例变量:

int[] in = new int[5];

因此,现在默认情况下,它包含5个零。但是,如果您与局部变量具有相同的数组,该怎么办?它是否初始化为零?这不是家庭作业,我正在学习Java语言。此致敬意


答案 1

首先要了解的是,局部变量存储在未使用其默认值显式初始化的堆栈上。虽然实例变量存储在上,并且默认情况下使用其默认值进行初始化。

此外,对象也会在 Heap 上创建,而不管实例引用变量是保存其引用,还是本地引用变量。


现在,发生的事情是,当你像这样声明你的数组引用作为局部变量,并用数组初始化它时:-

int[] in = new int[5];

数组引用存储在堆栈上,并为能够在上保存 5 个整数元素的数组分配内存(请记住,对象是在堆上创建的)。然后,在上分配5个连续的内存位置,用于存储整数值。数组对象上的每个索引按顺序保存对这些内存位置的引用。然后数组引用指向该数组。因此,由于在堆上分配了 5 个整数值的内存,因此它们将初始化为其默认值。(in)(size = 5)

而且,当您声明数组引用并且不要使用任何数组对象对其进行初始化时:-

int[] in;

数组引用是在 Stack 上创建的(因为它是局部变量),但默认情况下它不会初始化为数组,也不会初始化为 ,就像实例变量一样。null


因此,当您使用数组声明和初始化的第一种方法时,分配是这样的: -

"Your array reference"
     "on stack"    

       |    |          "Array object on Heap"
       +----+                  
       | in |---------->  ([0, 0, 0, 0, 0])
       +----+
       "Stack"                  "Heap"

答案 2

如果你这样做是一样的:

int[] in = new int[5]作为实例变量或局部变量。在这两种情况下,数组对象都将包含零。in

不同之处在于,如果你做这样的事情:

  1. 实例变量 : ;(它使用 null 初始化),并且对象将位于堆空间中int[] inin

  2. 局部变量 : ;(它必须由用户初始化)将存在于堆栈int[] in