Java 关于三目运算符的一个细节
我们首先来看一道题,问下面的代码输出是什么:
1 | Object o1 = true ? new Integer(1) : new Double(2.0); |
答案是「1.0」。
原因在于三目运算符要求表达式 2 和表达式 3 的类型一致,当不一致时,就会进行类型提升,「小」的数据类型就会往「大」的数据类型转。
Java 对于数值型的数据类型「大小」关系为 byte < short < int < long < float < double。
因此,Integer(1) 在这里被提升为了 Double(1),调用了 Double 类重写的 toString 方法,故输出为 1.0。
评论