От section 15.20.1 of the JLS:
Тип каждого из операндов оператора численного сравнения должен быть типом, который является обратимым (§5.1.8) до примитивного числового типа , или возникает ошибка времени компиляции. Бинарное числовое продвижение выполняется в операндах (§5.6.2). Если продвинутый тип операндов является int или long, выполняется сопоставление целого числа со знаком; если этот продвинутый тип является float или double, выполняется сравнение с плавающей запятой.
Section 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
Спасибо, очень много! – mikhail