2015-12-06 2 views
0

Мне было интересно, какой из них лучше в плане выделения памяти. Я знаю, что в этом масштабе они не будут отличаться, поскольку создание переменной потребует такой небольшой памяти, но я хотел привыкнуть к кодированию лучшего пути на будущее.Когда объявлять переменную при использовании для циклов?

public static void test(Scanner input, int[] arr){ 
    for (int i = 0; i < 5; i++){ 
     int age = input.nextInt(); 
     arr[i] = age; 
    } 

или

public static void test(Scanner input, int[] arr){ 
    int age = null; 
    for (int i = 0; i < 5; i++){ 
     age = input.nextInt(); 
     arr[i] = age; 
    } 
} 

Объявляя переменную перед цикл будет только выделить одно место в памяти для всех значений, которые я установил его, правильно? Но если я объявляю переменную в цикле for, будет выделено 5 разных мест в памяти или только одна, которая будет перезаписана, когда цикл for будет запущен снова?

Я также должен указать, что переменный возраст не будет использоваться нигде, кроме внутри цикла.

Спасибо.

+2

Посмотрите эту тему: http://stackoverflow.com/questions/407255/difference-between-declaring-variables-before-or-in-loop –

+0

Хорошо, спасибо, ребята. – Mauricio

ответ

1

Не имеет значения, поэтому мое предложение ограничивает требуемую область действия (то есть вариант 1) - также int age = null; немного вводит в заблуждение - вы читаете, как указатель, даже если это не так. int age = 0; будет немного понятнее.

0

Разница в производительности, если не устранена оптимизацией компилятора, не будет заметна вообще. Что примечательно, и его следует учитывать, это читаемость вашего кода.

Объявление переменной перед циклом делает код более трудным для чтения, а также загрязняет пространство имен вне цикла. Как правило, объявите переменные в минимальном объеме, в котором они вам нужны.

0

Какой лучше, первый или второй?

С точки зрения производительности вы должны его измерить. (И, на мой взгляд, если вы можете измерить разницу, компилятор не очень хорош).

С точки зрения обслуживания, сначала лучше. Объявлять и инициализировать переменные в одном и том же месте, в самом узком объеме. Не оставляйте зияющее отверстие между объявлением и инициализацией и не загрязняйте пространства имен, которые вам не нужны.

+0

Правда в этом конкретном случае, но это не отвечает на вопрос в общем виде. – Joffrey

1

многие дискуссии: уже есть: Difference between declaring variables before or in loop?

Есть другие факторы: статические, глобальные.

В общем, чем больше производительности, тем менее читаемая, тем менее безопасного

0

Не использовать временные переменные себя, это один лучше:

public static void test(Scanner input, int[] arr){ 
for (int i = 0; i < 5; i++){ 
    arr[i] = input.nextInt(); 
} 

}

0

Если переменные использоваться только в цикле, а затем объявлять его в цикле, чтобы загрязнять пространство имен функций.

0

В зависимости от обстоятельств. Если вы попытаетесь создать объект, которому требуется много памяти, первым методом вы должны выделить 5 раз память. Это занимает много времени. С другой стороны, если у вас много циклов for-loops, и вам нужно много объектов, я считаю, что использовать первый метод из-за недостатка ясности не является хорошей практикой.

Смежные вопросы