У вас, похоже, создается впечатление, что int и Integer в основном одинаковы. Далеко от него, но компилятор делает это так, потому что он добавляет все необходимые преобразования за спиной (автоматическое преобразование между примитивными int и оболочкой java.lang.Integer называется autoboxing).
Когда вы писали этот код:
Integer count;
count = Integer.MIN_VALUE;
while(count != Integer.MAX_VALUE) count++;
System.out.println("Max Value reached");
Что Javac сделал генерировать для вашего кода является эквивалентом:
Integer count;
count = Integer.valueOf(Integer.MIN_VALUE);
while(count.inValue() != Integer.MAX_VALUE) {
count = Integer.valueOf(count.intValue() + 1);
}
System.out.println("Max Value reached");
(я просто явно добавил вызовы компилятор неявно вставляет - с Явы версии ниже 5, вам нужно было бы явно написать его таким образом, потому что в этих версиях не было автобоксинга).
Таким образом, существуют вызовы .intValue() и .valueOf (int). Взгляните на javadocs для .valueOf (int); он создает новый объект Integer для почти каждого вызова. Это означает, что когда вы используете Integer вместо int, в цикле создается около 4 миллиардов объектов, а не просто увеличивается счетчик. Вот почему он занимает больше времени.
Подождите немного. –
Зачем это нужно? 'count ++' работать из-за autoboxing – talex
Отладчик и точка останова быстро убедили бы вас, что он не блокирует и не показал вам, почему, без необходимости в SO-сообщении ... – Tim