输出与我的预期不同

sad*_*lam 2 java

为何打印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)

Jon*_*eet 5

在第一个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"的整体结果.