Ответ 1
Вам необходимо прочитать раздел 15.25 Спецификации языка Java.
В частности:
В противном случае, если второй и третий операнды имеют типы, которые являются конвертируемыми (п. 5.1.8), к числовым типам, то есть несколько случаев:
- Если один из операндов имеет тип байта или байт, а другой имеет тип short или Short, то тип условного выражения является коротким.
- Если один из операндов имеет тип T, где T является байтом, коротким или char, а другой операнд является константным выражением типа int, значение которого представляется в типе T, то > - тип условное выражение - T.
- Если один из операндов имеет тип Byte, а другой операнд является константным выражением типа int, значение которого представляется в байте типа, тогда тип условного выражения является байтом.
- Если один из операндов имеет тип Short и другой операнд является константным выражением типа int, значение которого представляется в типе short, то тип условного выражения является коротким.
- Если один из операндов имеет тип; Символ и другой операнд - это постоянное выражение типа int, значение которого представляется в типе char, тогда тип условного выражения char.
- В противном случае для типов операндов применяется двоичное числовое продвижение (§5.6.2), а тип условного выражения - продвинутый тип второго и третьего операндов. Обратите внимание, что двоичное числовое продвижение выполняет преобразование для распаковки (§5.1.8) и преобразование значений (§5.1.13).
Итак, применяется двоичная цифровая реклама, которая начинается с:
Когда оператор применяет двоичное числовое продвижение к паре операндов, каждый из которых должен обозначать значение, которое можно конвертировать в числовой тип, применяются следующие правила, с тем чтобы использовать расширенное преобразование (§5.1.2) для преобразования операнды при необходимости:
- Если какой-либо из операндов имеет ссылочный тип, выполняется преобразование распаковки (п. 5.1.8). Тогда:
- Если один из операндов имеет тип double, другой преобразуется в double.
То, что здесь происходит - типы параметров преобразуются в int
и double
соответственно, второй операнд (третий в исходном выражении) имеет тип double
, поэтому общий тип результата double
.