为何打印X88
public static void main(String [] args)
{
char x = 'X';
int i = 0;
System.out.print(true ? x : 0);
System.out.print(false ? i : x);
}
Run Code Online (Sandbox Code Playgroud)
在第一个print语句中,条件表达式的类型是char(即'X'),因为JLS的第15.25部分(约为条件表达式的类型)适用于:
如果其中一个操作数是T类型,其中T是byte,short或char,另一个操作数是int类型的常量表达式,其值可以在类型T中表示,那么条件表达式的类型是T.
所以第一个语句打印"X".
在第二个print语句中,该部分不适用,因为i 它不是常量表达式.相反,本节适用:
否则,二进制数字提升(第5.6.2节)将应用于操作数类型,条件表达式的类型是第二个和第三个操作数的提升类型.请注意,二进制数字促销执行拆箱转换(第5.1.8节)和值集转换(第5.1.13节).
二进制数字提升将char'X'转换为int(88),第二个语句打印"88" - 因此"X88"的整体结果.