public class Hamlet {
public static void main(String[] args) {
Random random = new Random();
boolean b = random.nextBoolean();
Number result = (b || !b) ? new Integer(3) : new Float(1);
System.out.println(result);
}
}
输出结果为:
3.0
编译后的 Hamlet.class 文件,我们也会看到进行float的强转
public class Hamlet {
public Hamlet() {
}
public static void main(String[] args) {
Random random = new Random();
boolean b = random.nextBoolean();
Number result = !b && b ? (new Float(1.0F)).floatValue() : (float)(new Integer(3)).intValue();
System.out.println(result);
}
}
那么,为什么是整型转为浮点,而不是输出整型(3)呢,这就涉及三元操作符类型的转换规則:
- 若两个操作数不可转换,则不做转换,返回值为Object类型
- 若两个操作数是明确类型的表达式(比如变量),則按照正常的二进制数字来转换,int 类型转换为long类型,long类型转换为float类型等
- 若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,則转换为T类型;若S超出了T类型的范围,则T转换为S类
- 若两个操作数都是直接量数字(Literal) 则返回值类型为范围较大者。