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

2022-08-31 07:07:02

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

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

假设我这样做...

int[] arr = new int[5];
System.out.println(arr[0]);

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

static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);

... 将打印到标准输出。那么Java在默认情况下是如何初始化我的数组的呢?是否可以安全地假设默认初始化正在设置数组索引,这意味着我不必遍历数组并对其进行初始化?true0

谢谢。


答案 1

Java 程序中未由程序员显式设置为某些内容的所有内容都将初始化为零值。

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

当您创建某些内容的数组时,所有条目也会被清零。因此,您的数组在由 new 创建后立即包含五个零

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


答案 2

来自 Java 语言规范

  • 每个类变量、实例变量或数组组件在创建时都使用默认值进行初始化 (§15.9, §15.10):
 - For type byte, the default value is zero, that is, the value of `(byte)0`.
 - For type short, the default value is zero, that is, the value of `(short)0`.
 - For type int, the default value is zero, that is, `0`.
 - For type long, the default value is zero, that is, `0L`.
 - For type float, the default value is positive zero, that is, `0.0f`.
 - For type double, the default value is positive zero, that is, `0.0d`.
 - For type char, the default value is the null character, that is, `'\u0000'`.
 - For type boolean, the default value is `false`.
 - For all reference types (§4.3), the default value is `null`.