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

时间:2010-08-06 18:58:43

标签: java arrays initialization

所以我声明并初始化一个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,这意味着我不必遍历数组并初始化它?

感谢。

7 个答案:

答案 0 :(得分:255)

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

  • 用于引用(包含对象的任何内容)null
  • 对于int / short / byte / long,即0
  • 对于0.0
  • 的float / double
  • 对于false
  • 的布尔值
  • 对于空字符'\u0000'(其十进制等值为0)的字符。

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

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

答案 1 :(得分:55)

来自Java Language Specification

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

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

答案 2 :(得分:17)

JLS清楚地说

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

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

原始类型的默认值:docs

对象的默认值为null

答案 3 :(得分:3)

ThorbjørnRavnAndersen回答了大多数数据类型。由于关于数组的热烈讨论,

引用jls spec http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 “阵列组件在创建时使用默认值进行初始化”

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

答案 4 :(得分:2)

根据java,

  

数据类型 - 默认值

     

byte - 0

     

短 - 0

     

int - 0

     

长 - 0L

     

float - 0.0f

     

double - 0.0d

     

char - '\ u0000'

     

String(或任何对象) - null

     

布尔 - 假

答案 5 :(得分:2)

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++;
}

答案 6 :(得分:2)

Java中的每个类都有一个构造函数(构造函数是一个在创建新对象时调用的方法,它初始化类变量的字段)。因此,当您创建类的实例时,在创建对象时会调用构造函数方法,并且此时会初始化所有数据值。

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

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