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

所以我声明和初始化一个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); 

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

谢谢。

Java程序中的所有东西都没有被程序员明确地设置,被初始化为零值。

  • 对于引用(保存对象的任何东西),它是null
  • 对于int / short / byte / long,即0。
  • 对于float / double是0.0
  • 对于布尔是错误的。
  • 对于空字符'\ u0000'(其十进制等效值为0)的字符。

当你创build一个东西的数组,所有的条目也被归零。 所以你的数组在被new创build之后包含五个零。

注意(基于注释):在分配本地variables时,Java虚拟机不需要清除底层内存,因此Java语言规范要求对它们进行初始化。

从Java语言规范 :

  • 每个类variables,实例variables或数组组件在创build时都会使用默认值进行初始化(第15.9节,第15.10节):

    • 对于types字节,默认值为零,即(byte)0的值。
    • 对于shorttypes,默认值为零,也就是(short)0的值。
    • 对于inttypes,默认值为0,即0
    • 对于longtypes,默认值为0,即0L
    • 对于浮点types,默认值为正零,即0.0f
    • 对于doubletypes,默认值为正零,即0.0d
    • 对于chartypes,默认值是空字符,即'\u0000'
    • 对于布尔types,默认值为false
    • 对于所有的引用types(§4.3),默认值为null

JLS明确表示

数组初始化器创build一个数组并为其所有组件提供初始值。

这与数组是实例variables还是局部variables或类variables无关。

基本types的默认值: docs

对于对象,默认值为null

据java介绍,

数据types – 默认值

字节 – 0

短 – 0

int – 0

长 – 0L

浮动 – 0.0f

双 – 0.0d

char – '\ u0000'

string(或任何对象) – null

布尔值 – false

Java说初始化时JAVA数组的默认长度是10。

 private static final int DEFAULT_CAPACITY = 10; 

size()方法返回数组中插入元素的数量,并且由于在初始化时,如果没有在数组中插入任何元素,它将返回零。

 private int size; public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } public void add(int index, E element) { rangeCheckForAdd(index); ensureCapacityInternal(size + 1); // Increments modCount!! System.arraycopy(elementData, index, elementData, index + 1,size - index); elementData[index] = element; size++; } 

Java中的每个类都有一个构造函数(构造函数是在创build新对象时初始化类variables的字段时调用的方法)。 所以当你创build一个类的实例的时候,在创build对象的时候调用构造函数方法,并且在那个时候所有的数据值都被初始化了。

对于整数数组types的对象,数组中的所有值都在构造方法中初始化为0(零)。 对于布尔数组的对象也是类似的,所有的值都被初始化为false。

所以Java在创build对象时通过运行它的构造方法来初始化数组

ThorbjørnRavn Andersen回答了大多数的数据types。 由于有关arrays的讨论热烈,

从jls规范引用http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 “数组组件在创build时使用默认值进行初始化”

我认为无论数组是本地还是实例或类variables,它都将使用默认值