三目条件运算符与 if...else 结构性质并不是完全相同的,绝对不是对if else的封装。从效率上来看,一般是if else比较高,因为三目运算的话,可能还会涉及到数据类型转换的问题。
下面是 Java Language Specification 上关于条件表达式的说明
____●_如果第二和第三个操作数在可以转换为数值类型时,会有以下几种情况:
_______◆_操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Short 类型,那么这个表达式就是 short 类型
_______◆_操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型
_______◆_操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来表示,那么这个表达式就是 byte 类型
_______◆_操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型来表示,那么这个表达式就是 short 类型
_______◆_操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类
_________ 型来表示,那么这个表达式就是 char 类型
_______◆_否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和值集转换(value set conversion)
这样简单的条件控制语句不存在效率问题
三目运算符的源代码 3>2?true:false
是不是对if else 的封装:不是