public static void main(String[] args) {
char alpha = 'A';
int foo = 65;
boolean trueExp = true;
System.out.println(trueExp ? alpha : 0);
System.out.println(trueExp ? alpha : foo);
}
run result:A
65
我不知道第一个输出是A。谁能解释?非常感谢。
来自JLS 15.25.2:
如果其中一个操作数[条件?:运算符]的类型为
T
,其中T
是byte
、short
或char
,而另一个操作是int
类型的常量表达式(§15.29(,其值可在T
类型中表示,则条件表达式的类型为T
。
System.out.println(trueExp ? alpha : 0);
alpha
是char
,0
是具有常数表达式的int
,该常数表达式可由char
表示,因此条件表达式的结果是char
。
System.out.println(trueExp ? alpha : foo);
这里,foo
不是一个常量表达式,因此操作数将经过二进制数字提升为int
,因此它打印(int) alpha
、65
。
如果您要声明final int foo
,它将再次打印A
(Ideone演示(。