С раздел 15.20.1 JLS :
Тип каждого из операндов оператора числового сравнения должен быть типом, который можно преобразовать (§5.1.8) в примитивный числовой тип, иначе произойдет ошибка времени компиляции. Двоичное числовое продвижение выполняется над операндами (§5.6.2). Если повышенный тип операндов - int или long, то выполняется сравнение целых чисел со знаком; если этот повышенный тип является float или double, то выполняется сравнение с плавающей запятой.
Раздел 5.6.2 начинается с:
Когда оператор применяет двоичное числовое продвижение к паре операндов, каждый из которых должен обозначать значение, которое может быть преобразовано в числовой тип, применяются следующие правила в порядке использования расширяющегося преобразования (§5.1.2) для преобразования операнды по мере необходимости:
- Если какой-либо из операндов относится к ссылочному типу, выполняется преобразование без распаковки (§5.1.8).
Так что да, распаковка выполняется. >
не имеет значения для самих ссылок.
Более интересен случай ==
, когда возможны оба варианта - и в этом случае, если операнд или является примитивом, а другой можно преобразовать с помощью числового продвижения , тогда это происходит ... но если оба являются ссылочными типами, выполняется сравнение ссылок. Например:
Double d1 = new Double(1.0);
Double d2 = new Double(1.0);
System.out.println(d1 == d2); // Prints false due to reference comparison