В Java переменные класса и экземпляра принимают значение по умолчанию (null, 0, false), если они не инициализированы вручную. Однако локальные переменные не имеют значения по умолчанию. Если локальной переменной не присвоено значение, компилятор откажется компилировать код, который ее читает. ИМХО, это приводит к выводу, что инициализация локальной переменной с некоторым значением по умолчанию (например, null, которое может привести к NullPointerException позже), когда она объявлена, на самом деле плохая вещь. Рассмотрим следующий пример:
Object o;
if (<some boolean condition>)
o = <some value>;
else
o = <some other value>;
System.out.println(o);
Инициализация o
с нулевым значением совершенно не требуется, поскольку компилятор Java проверяет во время компиляции, что любой путь кода инициализирует o
(с нулевым или некоторым ненулевым значением) перед чтением переменной. Это означает, что компилятор откажется компилировать строку System.out.println(o);
, если вы закомментируете любую из двух инициализаций переменной o
в приведенном выше фрагменте кода.
Это относится к Java и, возможно, только к Java. Я не знаю о языке, как C #. В старом добром C (и, возможно, C ++) все же рекомендуется всегда инициализировать переменные при объявлении их, AFAIK. Такие "старые школы" языки программирования могут быть причиной того, что рекомендация всегда инициализировать переменные появляется в книгах и дискуссиях о современных языках, таких как Java, где компилятор отслеживает, была ли переменная инициализирована или нет.