在 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,这意味着我不必循环遍历数组并初始化它,这样做安全吗?

谢谢。

334869 次浏览

Java 程序中没有被程序员显式设置为某个值的所有内容都被初始化为零值。

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

当你创建一个数组的时候,所有的条目都会被归零。

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

来自 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`.

根据爪哇语,

Data Type-默认值

字节0

短0

Int-0

Long-0L

浮动-0.0 f

0.0 D

Char-“ u0000”

String (或任何对象)-null

Boolean-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 中的每个类都有一个构造函数(构造函数是在创建新对象时调用的方法,它初始化类变量的字段)。因此,当您创建类的实例时,将在创建对象时调用构造函数方法,并在此时初始化所有数据值。

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

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

Thorbjørn Ravn Andersen 回答了大多数数据类型,

引自 jls 规范 < a href = “ http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html # jls-4.12.5”rel = “ nofollow”> http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 “数组组件在创建时使用默认值初始化”

我认为不管数组是本地的还是实例的还是类变量的,它都会使用默认值

如果要将数组初始化为不同的值,可以使用 Arrays.fill()方法。此方法将帮助您为数组的每个元素设置值。

import java.util.Arrays;


public class ArraysFillExample {
public static void main(String[] args) {
// Assign -1 to each elements of numbers array
int[] numbers = new int[5];
Arrays.fill(numbers, -1);
System.out.println("Numbers: " + Arrays.toString(numbers));


// Assign 1.0f to each elements of prices array
float[] prices = new float[5];
Arrays.fill(prices, 1.0f);
System.out.println("Prices : " + Arrays.toString(prices));


// Assign empty string to each elements of words array
String[] words = new String[5];
Arrays.fill(words, "");
System.out.println("Words  : " + Arrays.toString(words));


// Assign 9 to each elements of the multi array
int[][] multi = new int[3][3];
for (int[] array : multi) {
Arrays.fill(array, 9);
}
System.out.println("Multi  : " + Arrays.deepToString(multi));
}
}

上面代码片段的输出如下:

Numbers: [-1, -1, -1, -1, -1]
Prices : [1.0, 1.0, 1.0, 1.0, 1.0]
Words  : [, , , , ]
Multi  : [[9, 9, 9], [9, 9, 9], [9, 9, 9]]

档号: https://kodejava.org/how-do-i-fill-array-with-non-default-value/