Использование for-each над массивом Objects - «Integer [] array» - Почему «for (int i: array)» работает? - PullRequest
1 голос
/ 25 июля 2010

Почему использование примитивного типа данных работает во втором цикле for-each, когда я зацикливаюсь на массиве объектов. Есть ли за кадром откат к примитивному эквиваленту объекта Integer?

import java.util.Arrays;
import java.util.Collections;

public class CodeTestingClass 
{

    public static void main(String[] args) 
    {

     Integer[] array = {1,2,3,4,5};

     Collections.rotate(Arrays.asList(array), 1);

     System.out.println(Arrays.toString(array) + "\n" );

  for(Integer i : array)
  {

   System.out.print(i);

  }

  System.out.print("\n");

  for(int i : array)
  {

   System.out.print(i);

  }  

    }
}

Ответы [ 2 ]

5 голосов
/ 25 июля 2010

Это автоматическая распаковка, вот и все.Нет необходимости перебирать что-либо, чтобы продемонстрировать, что:

Integer x = 10;
int y = x;

Из спецификации языка Java, раздел 5.1.8 :

Распаковка преобразования преобразует значенияссылочного типа на соответствующие значения примитивного типа.

(там есть еще несколько деталей, но это в основном просто список преобразований.)

Раздел 5.2 вызывает распакованные преобразования как доступные в контексте преобразований присваивания.

2 голосов
/ 25 июля 2010

Это потому, что для базовых типов Java (int, byte, short и т. Д.) Он выполняет " autoboxing " и autounboxing.

Когда вы вынимаете объект из коллекции, вы получаете целое число, которое вы вставили; если вам нужно int, вы должны распаковать Integer, используя метод intValue. Весь этот бокс и распаковка является болью и загромождает ваш код. Функция автобоксирования и распаковки автоматизирует процесс, устраняя боль и беспорядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...