2011-12-17 2 views

ответ

5

От 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 
+0

Спасибо, очень много! – mikhail

0

Будет использовать autoboxing. Вы не можете сделать больше, чем на ссылках

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