JAVA: использование сравнения двух автоматически упакованных значений дает мне противоречивые результаты [дубликаты]

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

public class Autoboxing {

public static void cmp(Integer a, Integer b) {
    if (a < b) System.out.printf("%d < %d\n", a, b);
    else if (a == b) System.out.printf("%d == %d\n", a, b);
    else System.out.printf("%d > %d\n", a, b);
}

public static void main (String[] args) {
    cmp(new Integer(42), new Integer(42));
    cmp(42, 42);
    cmp(128, 128);

}
}

Я ожидаю, что результат будет:

42 > 42
42 == 42
128 == 128

Но фактический результат отличается для последней строки. Это дает мне:

128 > 128

Что именно здесь происходит, так что примитив 42 ведет себя так, как я и ожидал (давая мне результат equals), а примитив 128 — нет?


person embiem    schedule 21.07.2015    source источник
comment
ты прав. это отвечает на мой вопрос   -  person embiem    schedule 21.07.2015