Что такое инициализация по умолчанию для массива в 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, что означает, что мне не нужно перебирать массив и инициализировать его?

Спасибо.

135
задан Hristo 6 August 2010 в 18:58
поделиться

2 ответа

Все, что в программе Java не установлено явно программистом, инициализируется нулевым значением.

  • Для ссылок (всего, что содержит объект) это null .
  • Для int / short / byte / long это 0 .
  • Для типа float / double это 0,0
  • Для логических значений это false .
  • Для char это нулевой символ '\ u0000' (десятичный эквивалент которого равен 0).

Когда вы создаете массив чего-либо, все записи также обнуляются. Итак, ваш массив содержит пять нулей сразу после его создания new .

Примечание (на основе комментариев): Виртуальной машине Java не требуется обнулять базовую память при выделении локальных переменных (это позволяет при необходимости выполнять эффективные операции со стеком), поэтому, чтобы избежать случайных значений, спецификация языка Java требует, чтобы локальные переменные были инициализирован.

264
ответ дан 23 November 2019 в 23:43
поделиться

Из Спецификации языка Java :

  • Каждая переменная класса, переменная экземпляра или компонент массива инициализируется значением по умолчанию при создании (§15.9, § 15.10):

    • Для байта типа значение по умолчанию равно нулю, то есть значение (байт) 0 .
    • Для типа short значение по умолчанию равно нулю, то есть значение (short) 0 .
    • Для типа int значение по умолчанию равно нулю, то есть 0 .
    • Для типа long значение по умолчанию равно нулю, то есть 0L .
    • Для типа float значение по умолчанию - положительный ноль, то есть 0,0f .
    • Для типа double значением по умолчанию является положительный ноль, то есть 0,0d .
    • Для типа char значением по умолчанию является нулевой символ, то есть '\ u0000' .
    • Для логического типа значение по умолчанию - false .
    • Для всех ссылочных типов (§4.3) значение по умолчанию null .
56
ответ дан 23 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: