【问题标题】:Ternary operator's precedence and assignment in JavaJava中三元运算符的优先级和赋值
【发布时间】:2016-05-25 12:49:45
【问题描述】:

为什么bar下面的方法编译失败,而foo没问题?

【问题讨论】:

  • 只是因为这是为 Java 定义规则的方式。 Java 不是 C#,因此没有理由期望在 C# 中工作的任何东西都以相同的方式在 Java 中工作。
  • 不清楚你在问什么。 Java 不是 C#,反之亦然。您还没有说明哪一行给出了编译错误。
  • @Jesper C# 比较是不必要的,我重新表述了这个问题。
  • 即使不将其与 C# 进行比较,我的答案仍然成立:只是因为这就是为 Java 定义规则的方式。见:Java Operator Precedence

标签: java ternary-operator


【解决方案1】:

这是因为 Java 的 precedence rules。赋值的先例低于?:,因此它最后得到评估。

这意味着 case bar 被解析如下:

return (s != null ? s : s) = "bar";

这对编译器没有意义。

如果您插入上面显示的括号,您会看到编译器在同一位置失败并显示相同的错误消息,因为两者实际上是相同的。

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 2018-08-14
    • 1970-01-01
    • 2023-03-07
    • 2013-03-27
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多