代码之家  ›  专栏  ›  技术社区  ›  Hristo

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

  •  125
  • Hristo  · 技术社区  · 15 年前

    所以我声明并初始化一个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是如何默认地初始化我的数组的呢?假设默认初始化将数组索引设置为 这意味着我不必遍历数组并初始化它?

    谢谢。

    7 回复  |  直到 15 年前
        1
  •  249
  •   Thorbjørn Ravn Andersen    6 年前

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

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

    当您创建某个数组时,所有条目也将归零。所以 数组在创建后包含五个零 new .

    注释(基于注释):当分配本地变量时,Java虚拟机不需要清零基础内存(如果需要的话,这允许高效的堆栈操作),以避免Java语言规范要求初始化局部变量的随机值。

        2
  •  54
  •   Michael Myers KitsuneYMG    9 年前

    Java Language Specification :

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

      • 对于byte类型,默认值为零,即 (byte)0 .
      • 对于short类型,默认值为零,即 (short)0 .
      • 对于类型int,默认值为零,即, 0 .
      • 对于long类型,默认值为零,即, 0L .
      • 对于类型float,默认值为正零,即, 0.0f .
      • 对于类型double,默认值为正零,即, 0.0d .
      • 对于char类型,默认值为空字符,即, '\u0000' .
      • 对于类型boolean,默认值为 false .
      • 对于所有参考类型(_§4.3),默认值为 null .
        3
  •  17
  •   Aniket Thakur    11 年前

    JLS 清楚地说

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

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

    基本类型的默认值: docs

    对于对象,默认值为 null .

        4
  •  3
  •   nantitv    9 年前

    托尔比安徒生回答了大多数数据类型。因为关于阵列的讨论很激烈,

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

    我认为不管数组是局部变量、实例变量还是类变量,它都将使用默认值

        5
  •  2
  •   Abhishek Singh    11 年前

    根据Java

    数据类型-默认值

    字节-0

    短-0

    利息-0

    长-0升

    浮动-0.0f

    双-0.0d

    字符-'\u0000'

    字符串(或任何对象)-空

    布尔值-假

        6
  •  2
  •   tbraun89    10 年前

    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++;
    }
    
        7
  •  2
  •   B. Go Tim    6 年前

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

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

    因此,Java在创建对象时通过运行其构造函数方法来初始化数组。