В результате вычитания двух объектов Integer получается целое число или примитив int? - PullRequest
1 голос
/ 31 октября 2011

Скажем, у нас есть два объекта Integer:

Integer i=100,j=200;

Оценивает ли (j-i) другой объект Integer Wrapper со значением 100 или примитив int?

Ответы [ 2 ]

4 голосов
/ 31 октября 2011

Результат будет int 100.

И i, и j будут автоматически распакованы, поэтому результат i-j будет int.

Но если вы присваиваете результат следующим образом:

Integer r = i - j;

, тогда результат будет снова автоматически упакован.

4 голосов
/ 31 октября 2011

Быстрый тест показывает, что java использует кэш Integer и повторно использует i:

@Test
public void test() {
    Integer i=100, j=200;
    System.out.println("i: " + System.identityHashCode(i));
    System.out.println("j: " + System.identityHashCode(j));

    Integer sub = j-i;
    System.out.println("j-i: " + System.identityHashCode(sub));
}

Выходы:

i: 1494824825
j: 109647522
j-i: 1494824825 <-- same as i
...