整型数组初始化
2022-09-01 21:43:54
我在这里有一个与Java相关的简单问题。假设您有一个 int 数组作为实例变量:
int[] in = new int[5];
因此,现在默认情况下,它包含5个零。但是,如果您与局部变量具有相同的数组,该怎么办?它是否初始化为零?这不是家庭作业,我正在学习Java语言。此致敬意
我在这里有一个与Java相关的简单问题。假设您有一个 int 数组作为实例变量:
int[] in = new int[5];
因此,现在默认情况下,它包含5个零。但是,如果您与局部变量具有相同的数组,该怎么办?它是否初始化为零?这不是家庭作业,我正在学习Java语言。此致敬意
首先要了解的是,局部变量存储在未使用其默认值显式初始化的堆栈上。虽然实例变量存储在堆上,并且默认情况下使用其默认值进行初始化。
此外,对象也会在 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"
如果你这样做是一样的:
int[] in = new int[5]
作为实例变量或局部变量。在这两种情况下,数组对象都将包含零。in
不同之处在于,如果你做这样的事情:
实例变量 : ;(它使用 null 初始化),并且对象将位于堆空间中。int[] in
in
局部变量 : ;(它必须由用户初始化)将存在于堆栈中int[] in