在使用三元运算符的过程中遇到这样一个情况
char x = 'x';
int i = 10;
//输出结果如注释所示
System.out.println(true? x : i);// 120
System.out.println(true? 'x' : 1111110);// 120
System.out.println(true? 'x' : 111);// x 111小于char的容量 编译时默认111为char型数据
System.out.println(false? 'x' : 111);// o
System.out.println(false? 'x' : 111111);// 111111
三元操作符类型的转换规則:
- 若两个操作数不可转换,则不做转换,返回值为Object类型
- 若两个操作数是明确类型的表达式(比如变量),則按照正常的二进制数字来转换,int 类型转换为long类型,long类型转换为float类型等
- 若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,則转换为T类型;若S超出了T类型的范围,则T转换为S类
- 若两个操作数都是直接量数字(Literal) 则返回值类型为范围较大者。