Все, что он делает, это определение другой области действия, оно не переводится в вызов метода. Помните, что для местных жителей 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
никогда не используется в нескольких случаях, что означает это идеальный кандидат (в этом упрощенном примере) для использования регистра или одного пространства в памяти.
вы имеете typo'd 'variables' в ваших последних два предложений - я не исправил его упаковывает вы добавляете в свой ответ на данный момент и наши правки перекрываются =) (Плюс я думаю, что это плохой этикет, чтобы отредактировать кого-то, пока вы не уверены, что они закончили с ним!) (* Изменить: удалить опечатку из слова предложение * ** sigh **) – Rob
Итак, у меня был 25% -ный показатель успеха в написании этого слова (на самом деле я, вероятно, тоже ошибся в четвертый раз, но я сам это поймал ...) –
Лучше не упоминать о том, что вы плюрализовались 'переменная' в вашем предпоследнем предложении, тогда ... ;-) О, и +1 от меня за ваш ответ =) – Rob