【发布时间】:2013-12-22 09:18:43
【问题描述】:
下面3行代码编译OK。 (请注意,此代码是“人工 Java 编码”的示例,因此不会出现在专业编写的代码中。)
int x, y;
boolean b=true;
x = b ? y=1 : 2; // Compiles OK.
如果我现在更改上面第 3 行中的代码,使其看起来像下面的代码行,编译器会生成错误。
// Change the position of the "y assignment", and now the code doesn't compile.
x = b ? 1 : y=2;
这里是语法错误信息:
有人可以解释一下这种行为吗(向 Java 新手学习)?谢谢。
【问题讨论】:
-
非常有趣。这可能是一个很好的面试问题。
-
对于任何好奇的人,看起来这两种语法在 C# 中都是有效的。
-
次要注意:如果
b为真,则y被赋值为1。但如果b为假,则不执行此赋值,y保留其现有值. -
@Duncan 真的吗?你想在面试时看到这样的问题吗?您是否认为作为 Java 开发人员必须知道 Java 中每个运算符的优先级?您能否告诉我这是否正确编译:
if (obj instanceof obj==null ? String.class : Integer.class)以及它是如何工作的? -
@Pshemo 我喜欢引发思考和辩论的问题。当然,如果候选人立即知道答案,我会印象深刻,但我没想到会这样。相反,我更愿意看看他们是如何解决问题的;他们有什么想法,看看他们是否有我提供的更多信息。
标签: java ternary-operator