Я видел, как он обсуждался где-то, что следующий код приводит к тому, что 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
Я предполагаю, что причина этого заключается в том, чтобы сместить левую сторону в Double
так же, как это происходит для сравнений и вычислений Integer
/Double
, но здесь левая и правая стороны не взаимодействуют таким образом.
Почему это происходит?