2016-04-11 2 views
3

В Java, когда два объекта сравниваются с использованием ==, их ссылки также сравниваются. Но что происходит, когда их сравнивают с использованием других реляционных операторов? Например:Java Object <= реляционный оператор check

Integer a = new Integer(10); 
Integer b = new Integer(9); 
if (a >= b) { 
    System.out.println("A is greater"); 
} 

Когда я запускаю это, я получаю вывод, поскольку A больше, почему так? Не сравниваются ли ссылки или они делают, и это просто совпадение?

Кроме того, если один из аргументов примитивен, не примитивный ли он становится непримиримым для примитива для таких сравнений?

+0

Введите его в исходный файл и посмотрите, что происходит с более интересными типами. * В общем * это синтаксическая ошибка. –

ответ

6

В вашем примере Integer (s) являются unboxed примитивным int (s). Нет <= (или >=) сравнение для ссылочных типов (без Comparable, Comparator или аналогичных).

+0

Но если перегрузки оператора нет, как она распаковывается? Это оптимизация компилятора? –

+0

Unboxing - это дополнение к компилятору, которое позволяет Java преобразовывать типы обертки в примитивные типы (и наоборот). –

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