Java中数组的默认初始化是什么?

Hri*_*sto 135 java arrays initialization

所以我正在声明并初始化一个int数组:

static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
    arr[i] = UN;
}
Run Code Online (Sandbox Code Playgroud)

说我这样做......

int[] arr = new int[5];
System.out.println(arr[0]);
Run Code Online (Sandbox Code Playgroud)

... 0将打印到标准输出.另外,如果我这样做:

static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
Run Code Online (Sandbox Code Playgroud)

... true将打印到标准输出.那么Java默认情况下如何初始化我的数组呢?是否可以安全地假设默认初始化是将数组索引设置为0意味着我不必遍历数组并初始化它?

谢谢.

Tho*_*sen 264

Java程序中未被程序员明确设置为某些内容的所有内容都被初始化为零值.

  • 对于引用(包含对象的任何东西)null.
  • 对于int/short/byte/long,这是一个0.
  • 对于浮点/双是一个 0.0
  • 对于布尔人来说是一个false.
  • 对于为空字符的char '\u0000'(其十进制等效值为0).

创建某个数组时,所有条目也都归零.因此,您的数组在创建后立即包含五个零new.

注意(基于注释):在分配局部变量时,Java虚拟机不需要将底层内存清零(如果需要,这允许有效的堆栈操作),因此为避免随机值,Java语言规范要求初始化局部变量.


Dav*_*sta 56

Java语言规范:

  • 每个类变量,实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9,§15.10):

    • 对于type byte,默认值为零,即值(byte)0.
    • 对于short类型,默认值为零,即值(short)0.
    • 对于int类型,默认值为零,即0.
    • 对于long类型,默认值为零,即0L.
    • 对于float类型,默认值为正零,即0.0f.
    • 对于double类型,默认值为正零,即0.0d.
    • 对于char类型,默认值为空字符,即'\u0000'.
    • 对于boolean类型,默认值为false.
    • 对于所有引用类型(§4.3),默认值为null.

  • 那么Array of Long s和Integer s呢? (2认同)
  • @Zac与上面相同,字符串是一个对象,因此数组中的默认值是“null”。 (2认同)

Ani*_*kur 18

JLS清楚地说

数组初始值设定项创建一个数组并为其所有组件提供初始值.

这与数组是实例变量还是局部变量或类变量无关.

基元类型的默认值:docs

对于对象,默认值为null.

  • 不回答问题。他正在询问默认初始化。 (2认同)