Вот краткое изложение ответов Мартина против Лёвиса и шелковистых .
Мы можем сказать следующее об инициализации String
объекта:
- Если
String
является локальной переменной, она не будет инициализирована.
- Если
String
является переменной класса, переменной экземпляра или компонентом массива, то он будет инициализирован в null
.
Аргументация следующая:
Как переменная с типом String
является ссылочным типом, согласно Спецификация языка Java, третье издание , Раздел 4.12.5: Начальные значения переменных говорит следующее:
Каждая переменная в программе должна иметь
значение до его использования
Далее говорится об инициализации ссылочных типов:
- Каждая переменная класса, переменная экземпляра или компонент массива
инициализируется значением по умолчанию, когда
это создано (§15.9, §15.10):
- [удалена информация о несущественной информации]
- Для всех ссылочных типов (§4.3) значением по умолчанию является
null
.
И, наконец, следующее о локальных переменных:
- Локальная переменная (§14.4, §14.14) должна
получить явное значение перед
используется при любой инициализации
(§14.4) или присвоение (§15.26), в
способ, который может быть проверен
компилятор использует правила для определенных
назначение (§16).