2013-10-09 3 views
2

Я использовал int в for-loop. Как показано ниже:Использует ли использование целочисленного цикла в любом случае?

for (int i = 0; i < 100 ; i++) { 
    //Do something... 
} 

Если я использую Integer вместо int, как показано ниже, делает это делает никакой разницы?

for (Integer i = 0; i < 100 ; i++) { 
    //Do something... 
} 

ответ

5

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

Также он может слегка замедлить цикл, не имея реального преимущества.

Integer В принципе должны всегда использоваться, когда вы на самом деле потребность число быть Object (например, когда вы положили его в коллекцию, когда null является допустимым значением, ...). В любое другое время вы должны использовать примитивные типы, где это возможно (int, char, ...).

1

Нет, это не имеет никакого отношения к функционированию. Функция автоматического бокса и автоматического разблокирования помогает вам с i++ в петле

3

Предполагаете, что вы уже знаете разницу между int и Integer.
Петли будут вести себя одинаково, но использование int предпочтительнее, когда вам не нужно Integer. Не делайте этого, тратите время (заглавные буквы «i» и добавляя «eger» :)). Кроме того, это не эффективно, так как на каждой итерации будет выполняться auto-unboxing/auto-boxing.

Использование int, когда вы можете жить без Integer.

2

Единственная большая вещь (хотя я бы не сделать это сам & не советую вам делать что либо) я мог бы подумать об использовании в таком сценарии

for (Integer i = 0; i < 100 ; i++) { 
    i = null; // Can do this here but not in the other loop 
    // Obviously this is not going to be the only line here, unless you wanna get a NPE 
    // Just something, which you COULD DO 
} 

Кроме этого, я действительно сомневаюсь, что это будет иметь большое значение. Хотя использование int является предпочтительным. Кроме того, бокс и авто-бокс для каждой итерации - это не очень хорошо (когда вы можете просто использовать int).

+4

Из интереса, что происходит, когда вы 'i ++', когда 'i' является' null'? Разве это не вызовет исключение NullPointerException? – Bathsheba

+0

@ Батшеба три буквы ... NPE – codeMan

+0

@ Батшеба - я сказал, что мы можем это сделать. Не сказал, что это будет единственный фрагмент кода в блоке цикла. Я могу сделать это null, проверить, является ли оно нулевым или нет, сделать что-то еще и переназначить это значение. – SudoRahul

3

Я всегда выбираю примитив над упаковщиками, когда когда-либо могу.

Ваш код работает нормально.

Но, хотя и очень небольшой разницей,

В то время как время выполнения, если мы используем Упаковщики Boxing conversions и Unboxing Conversions происходит во время выполнения, очевидно, что занимает больше времени.

Если р является значение типа Int, то бокс преобразования преобразует р в опорный г класса и типа Integer, таким образом, что r.intValue() == р

И наоборот , это время будет сохранено в случае, если мы используем Primitives.

-1

Нет, это не так. Integer - это оболочка, которая добавляет некоторые функции к примитиву int. Если вы не собираетесь использовать эту функциональность, лучше придерживаться int.

В этом случае он не может сделать много различий, но предположит, что вы должны были использовать сказать Integer[] вместо int[], того Youd будет тратить много памяти и скорости.

+5

'ArrayList ' не работает на Java! –

+0

Пропущенные в спешке. Исправленный. – Aneesh

2

Использование Integer будет нести стоимость исполнения из-за бокса, поэтому используйте int.

Однако, если вы намереваетесь использовать i внутри тела петли, как, например, ключ карты хэша, используйте ссылочный тип Integer.

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