Можем ли мы предположить значения массива по умолчанию в Java? например, предположим, что массив int задан для всех нулей?

На практике можно предположить, что все массивы int в Java начнут заполняться нулями? для всех машин, на которых работает JVM?

Это верно для всех типов? char? булева? перечисления?

Где это официально зарегистрировано?

В учебниках, которые я скажу, что int массивы установлены на ноль, но они также рекомендуют написать цикл for, чтобы установить все значения в ноль, просто "чтобы быть более четкими".

Ответ 1

Спецификация Java Language - это подходящее место для поиска такой информации:

Компоненты массива представляют собой неназванные переменные, которые создаются и инициализируются значениями по умолчанию (§4.12.5) всякий раз, когда создается новый объект, являющийся массивом

Значения по умолчанию сами приведены в разделе раздел 4.12.5.

  • Для типа байта значение по умолчанию равно нулю, то есть значение (байт) 0.
  • Для типа short значение по умолчанию равно нулю, то есть значение (короткое) 0.
  • Для типа int значение по умолчанию равно нулю, то есть 0.
  • Для типа long значение по умолчанию равно нулю, то есть 0L.
  • Для типа float значение по умолчанию - положительное ноль, то есть 0.0f.
  • Для типа double значение по умолчанию - положительное ноль, то есть 0.0d.
  • Для типа char значение по умолчанию - это нулевой символ, то есть '\ u0000'.
  • Для типа boolean значение по умолчанию false.
  • Для всех типов ссылок значение по умолчанию null.

Ответ 2

Да. Примитивные типы в Java всегда ноль-инициализируются. Ссылки также инициализируются нулевым значением.

Ответ 3

Это должна быть спецификация языка Java §4.12.5 Начальные значения переменных. вместо §4.5.5

"Для байта типа значение по умолчанию равно нулю, то есть значение (байт) 0.
Для типа short значение по умолчанию равно нулю, то есть значение (короткое) 0.
Для типа int значение по умолчанию равно нулю, то есть 0.
Для типа long значение по умолчанию равно нулю, то есть 0L.
Для типа float значением по умолчанию является положительный ноль, то есть 0.0f.
Для типа double значение по умолчанию равно положительному нулю, то есть 0.0d.
Для типа char значением по умолчанию является нулевой символ, то есть '\ u0000'.
Для типа boolean значение по умолчанию - false.
Для всех ссылочных типов (§4.3) значение по умолчанию равно null.

Ответ 4

Ваш учебник ошибочен! Написание такого кода бессмысленно и пустая трата времени, набирающего его, и компьютеров, запускающих его.

Как говорили другие, компилятор гарантирует, что переменным вне методов (переменным класса/экземпляра) присваивается значение 0, false или null. Поскольку вы, вероятно, знаете, что компилятор не дает переменные внутри значений методов, а вместо этого заставляет вас давать им значение до их использования.

Вы найдете, если вы будете делать что-то "правильно", что около 90% -95% ваших "переменных" никогда не меняются после того, как им присваивается значение. Однако новые программисты имеют тенденцию делать такие вещи:

int x = 0;

// some code that never uses x

x = 5;

// more code that only reads x and never modifies it.

это не позволяет вам отмечать x как "final". Если вы можете пометить x как "final", то это предотвратит случайную модификацию значения, что предотвращает ошибки.

Я бы написал код вроде:

final int x;

// some code that never uses x

x = 5;

// more code that only reads x and never modifies it.

Это называется пустым окончанием (конечная переменная, которая не имеет значения при объявлении).

Если вы помните, что переменные класса/экземпляра инициализируются средой выполнения, вы, надеюсь, не будете писать код, чтобы инициализировать их сбрасыванием значений, а затем вы можете отметить их как окончательные.

Моя личная практика - всегда отмечать все как окончательные, пока я не нахожу, что мне нужно ее модифицировать, и никогда не инициализировать переменную, пока я не узнаю фактическое значение, которое я хочу иметь. Это делает код более быстрым (не заметно, поскольку назначения обычно очень быстрые) и более безопасны, поскольку я редко случайно изменяю значение, когда не должен.