Почему локальные переменные не могут иметь значение по умолчанию?
Почему локальные переменные не могут иметь значение по умолчанию в Java?
Например:
static int number1;
public static void main (String[] args)
{
int number2;
System.out.println(number1);
System.out.println(number2);
}
Здесь number1 благополучно выведется, а при выводе number2 выдаст ошибку:
The local variable number2 may not have been initialized
Почему так происходит?
Ответы (2 шт):
Java изначально проектировали так, чтобы в ней невозможны были типичные ошибки, вызывавшие проблемы в корпоративном ПО в предыдущие годы. В частности операции с не инициализированными переменными.
потому что память для локальных переменных выделяется на стеке а как выделить память на стеке ?? просто переместить указатель на верхушку стека , не записывая в эту область никакого значения вообще это не только в java, это справедливо для многих языков, например в с/с++ локальная переменная также не будет инициализирована, то есть в ней буден находится мусор, просто компилятор не выдаст ошибку, а в яве и c# компилятор за этим следит, а сделано это для производительности, так как легче просто переместить указатель, чем переместить указатель и еще писать туда какието там значения по умолчанию
ну а глобальные переменные хранятся не в стеке, для них есть там гдето специально отведённое место, то есть память под них выделяется один раз в начале работы программы и туда записывается значение по умолчанию, это никак не повлияет на производительность, так как выполняется только вначале
а память для локальных переменных память выделяется на стеке при каждом вызове функции