Что вы Seing это один из «автоматизма» в отношении переменных.
Некоторые переменные, такие как строки, имеют значение NULL, что означает, что они могут иметь значение null в качестве значения и, следовательно, это значение по умолчанию для них, если они не инициализированы.
Другие переменные, такие как (большинство) числовых переменных, не имеют значения NULL и поэтому не могут иметь значение null в качестве значения. Для этих переменных используется другое значение по умолчанию, если они не инициализированы. Как и для целых чисел 0.
Помните, что с нулевым значением я не имею в виду? переменные типа int? но действительно переменная самого типа, если она может иметь нулевое значение.
«Нельзя использовать до инициализации» является мерой безопасности. Как обычно, когда вы печатаете переменную, которую вы никак не задали, вы получаете полностью нежелательные данные (0 для int, null для других, ...), поэтому вы всегда должны читать только из переменная, когда она была инициализирована каким-то образом. Когда это запрещено, независимо от того, каким способом вы можете видеть это как функцию безопасности.
Редактировать: Чтобы сделать его более понятным, значение «По умолчанию» и «инициализировано», возможно, немного запутывают здесь. Это значит, что у них могло быть ЛЮБОЕ значение, и они просто настроены на то, что им разрешено, и могут представлять недопустимое состояние, такое как null для nullable и другое значение (в данном случае 0) для non-nullable. По сути, эти переменные не инициализируются с этой целью. Они просто, похоже, настроены на значение, находящееся в пределах их диапазона (хотя компилятор считает их еще неинициализированными).
Я попытался несколько раз дать немного подробный ответ, но трудно получить нужный уровень детализации. В общем, ответ Глорина полностью правильный, понятный и короткий. Просто обратите внимание, что то, что вы видите в отладчике, не обязательно происходит, когда происходит * не * отладка - например, в отладчике время жизни локалей привязано к области видимости, в то время как то же самое не применяется за пределами отладчика (например, местные жители имеют право на сбор после их использования в последний раз, вместо того, чтобы ждать завершения «блока»). Это также включает в себя множество различий в обработке и инициализации стека. – Luaan