Все, что он делает, это определяет другую область, она не переводится в вызов метода. Помните, что для локальных пользователей CLR / JVM может решить вообще не использовать для них пространство стека, а может использовать регистры процессора. В некоторых случаях, если вы извините за каламбур, он может решить оптимизировать некоторые из местных жителей, поскольку они не нужны. Он может даже решить, что может использовать один регистр или область памяти «в стеке» для нескольких переменных, поскольку они никогда не будут перекрываться.
Пример из связанного вопроса:
switch(condition) {
case CONDITION_ONE: {
int account = 27373;
}
case CONDITION_TWO: {
// account var not needed here
}
case CONDITION_THREE: {
// account var not needed here
}
case CONDITION_FOUR: {
int account = 90384;
}
}
В нынешнем виде этот код функционально идентичен:
int account;
switch(condition) {
case CONDITION_ONE: {
account = 27373;
}
case CONDITION_TWO: {
// account var not needed here
}
case CONDITION_THREE: {
// account var not needed here
}
case CONDITION_FOUR: {
account = 90384;
}
}
Поскольку переменная account
никогда не используется в нескольких случаях, это означает, что она является идеальным кандидатом (в этом упрощенном примере) для использования регистра или одного пробела в памяти.