我们首先来看一道题,问下面的代码输出是什么:

1
2
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);

答案是「1.0」。

原因在于三目运算符要求表达式 2 和表达式 3 的类型一致,当不一致时,就会进行类型提升,「小」的数据类型就会往「大」的数据类型转。

Java 对于数值型的数据类型「大小」关系为 byte < short < int < long < float < double。

因此,Integer(1) 在这里被提升为了 Double(1),调用了 Double 类重写的 toString 方法,故输出为 1.0。