【发布时间】:2011-06-10 07:58:26
【问题描述】:
考虑这段代码sn-p:
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 specifications regarding the ternary operator,我们会发现
如果其中一个操作数是 T 类型,其中 T 是 byte、short 或 char,而另一个操作数是 int 类型的常量表达式,其值可以用类型 T 表示,则条件表达式的类型是 T .
所以第一个输出将'X' 字符视为int,这就是它打印88 的原因。
但是,我不确定为什么使用 final 会改变第二个输出的行为。
【问题讨论】:
-
顺便说一句,这是我今天第二次看到有人有效地假设他们期望看到的就是每个人其他 i> 期待看到。我认为说“在运行这段代码时,我希望看到...”会更合适
-
@Jon,你是对的。问题已编辑。
标签: java final ternary-operator