int数组初始化

时间:2012-11-22 11:23:50

标签: java arrays initialization int default-value

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

int[] in = new int[5];

所以,现在默认它包含5个零。 但是如果你有与本地变量相同的数组呢?它被初始化为零吗?这不是作业,我正在学习Java语言。 最好的问候

7 个答案:

答案 0 :(得分:52)

要理解的第一件事是, local varibles 存储在堆栈上,它们没有使用默认值显式初始化。虽然实例变量存储在中,但它们默认使用默认值进行初始化。

此外,对象也会在上创建,无论实例引用变量是保持其引用还是本地引用变量。


现在,当您将数组引用声明为局部变量并使用数组初始化时,会发生什么: -

int[] in = new int[5];

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

此外,当您声明数组引用时,并且不使用任何数组对象初始化它: -

int[] in;

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


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

"Your array reference"
     "on stack"    

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

答案 1 :(得分:5)

如果你这样做也是一样的:

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

如果你做的话会有所不同:

  1. 实例变量:int[] in; (它使用 null 初始化),in对象将存在于堆空间中。

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

答案 2 :(得分:3)

对于基本类型数组,它被初始化为默认值。 在documentation中它说:

  

创建具有指定长度的单维数组   数组的每个组件都初始化为其默认值

对于整数类型,默认值为0。

答案 3 :(得分:2)

是的,当你初始化一个数组时,内容将被设置为该类型的默认值,int它将为0,而对于引用类型,它将是null

如果您初始化一个数组并检查内容,您可以自己看到:

...
final int[] in = new int[5];

for (int i = 0; i < in.length; i++) {
    System.out.println(in[i]);
}
...

这将打印:

0
0
0
0
0

答案 4 :(得分:1)

public void method() {
    int[] in = new int[5];
    System.out.pritnln(in[0]); //output in 0
}

在这种情况下,数组是一个本地变量,您只需要初始化数组。初始化数组后,您的数组元素**将获得**默认值

答案 5 :(得分:1)

实例变量或局部变量中声明的数组是否会初始化为默认值并不重要。

每个类变量,实例变量或数组组件在创建时都会使用默认值进行初始化。

根据JLS

An array initializer creates an array and provides initial values for all its components.

答案 6 :(得分:0)

当您将数组实例化为局部变量时,数组不包含5个零。