Почему тернарный оператор неожиданно приводит к целым числам?

Я видел где-то обсуждение, что следующий код приводит к тому, что obj является Double , но он печатает 200.0 слева боковая сторона.

Object obj = true ? new Integer(200) : new Double(0.0);

System.out.println(obj);

Результат: 200.0


Однако, если вы поместите другой объект с правой стороны, например BigDecimal , тип obj - Integer , как и должно быть.

Object obj = true ? new Integer(200) : new BigDecimal(0.0);

System.out.println(obj);

Результат: 200


Я предполагаю, что причина этого как-то связана с приведением левой части к двойному таким же образом, как это происходит для целого числа / двойные сравнения и вычисления, но здесь левая и правая части не взаимодействуют таким образом.

Почему это происходит?

40
задан HXCaine 3 November 2011 в 22:36
поделиться