Какова инициализация по умолчанию массива в 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
, что означает, что мне не нужно перебирать массив и инициализировать его?
Спасибо.
Ответы
Ответ 1
Все в программе Java, явно не установленное программистом, инициализируется нулевым значением.
- Для ссылок (что-нибудь, что содержит объект), который является
null
. - Для int/short/byte/long это
0
. - Для float/double это
0.0
- Для логических значений это
false
. - Для символа char это нулевой символ
'\u0000'
(десятичный эквивалент которого равен 0).
Когда вы создаете массив чего-либо, все записи также обнуляются. Таким образом, ваш массив содержит пять нулей сразу после того, как он создан new
.
Примечание (на основе комментариев): Виртуальная машина Java не обязана обнулять базовую память при выделении локальных переменных (это позволяет при необходимости выполнять эффективные операции со стеком), поэтому во избежание случайных значений Спецификация языка Java требует инициализации локальных переменных.
Ответ 2
Из Спецификация языка Java:
Ответ 3
JLS ясно говорит
Инициализатор массива создает массив и предоставляет начальные значения для всех его компонентов.
и это независимо от того, является ли массив переменной экземпляра или локальной переменной или переменной класса.
Значения по умолчанию для примитивных типов: docs
Для объектов по умолчанию значения null
.
Ответ 4
Thorbjørn Ravn Andersen ответил на большинство типов данных. Поскольку в массиве было горячее обсуждение,
Цитата из jls spec http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
"компонент массива инициализируется значением по умолчанию при его создании"
Я думаю, что независимо от того, является ли массив локальной или переменной экземпляра или класса, он будет со значениями по умолчанию
Ответ 5
Согласно java,
Тип данных - значения по умолчанию
byte - 0
short - 0
int - 0
long - 0L
float - 0.0f
double - 0.0d
char - '\ u0000'
Строка (или любой объект) - null
boolean - false
Ответ 6
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
У каждого класса в Java есть конструктор (конструктор - это метод, который вызывается при создании нового объекта, который инициализирует поля переменных класса). Поэтому, когда вы создаете экземпляр класса, при создании объекта вызывается метод конструктора, и все значения данных инициализируются в это время.
Для объекта целочисленного типа массива все значения в массиве инициализируются в 0 (ноль) в методе конструктора. Аналогично для объекта логического массива все значения инициализируются как false.
Таким образом, Java инициализирует массив, выполняя метод конструктора при создании объекта.