Числовое преобразование в условном операторе? :
В условном операторе a
?
b
:
c
, если оба b
и c
являются различными числовыми типами , следующие правила преобразования применяются при компиляции времени, чтобы сделать их типы равными , по порядку:
Типы преобразуются в соответствующие им примитивы , которые называются unboxing .
Если один операнд был константой int
(не Integer
до распаковки), значение которого представлено в другом типе, операнд int
преобразуется в другой тип.
В противном случае меньший тип преобразуется в следующий больший, пока оба операнда не имеют одинаковый тип. Заказы на конвертацию:
byte
-> short
-> int
-> long
-> float
-> double
char
-> int
-> long
-> float
-> double
В конечном итоге все условное выражение получает тип своего второго и третьего операндов.
Примеры:
Если вы объедините char
с short
, выражение станет int
.
Если вы объедините Integer
с Integer
, выражение станет Integer
.
Если вы объедините final int i = 5
с Character
, выражение станет char
.
Если вы объедините short
с float
, выражение станет float
.
В примере вопроса 200 конвертируется из Integer
в double
, 0.0 распаковывается из Double
в double
, и все условное выражение становится double
, которое в итоге упаковывается в Double
, потому что obj
имеет тип Object
.