考虑这个代码片段:
public static void main(String[] args) {
int z1 = 0;
final int z2 = 0;
System.out.println(false ? z1 : 'X');
System.out.println(false ? z2 : 'X');
}
运行此代码时,我希望X
在您的控制台中看到两个。然而,真正的输出是:
88
X
如果我们看一下关于三元运算符的 Java 规范,我们会发现
如果其中一个操作数是 T 类型,其中 T 是 byte、short 或 char,而另一个操作数是 int 类型的常量表达式,其值可以用 T 类型表示,则条件表达式的类型是 T。
所以第一个输出将'X'
char 视为一个int
,这就是它打印的原因88
。
但是,我不确定为什么使用会final
改变第二个输出的行为。