【问题标题】:questions on conditional operator in javajava中条件运算符的问题
【发布时间】:2011-08-13 13:13:15
【问题描述】:

我从 Khalid Mugal 和其他人那里读到条件运算符是右结合的。

谁能给我解释一下这是什么意思并给我看一个简单的例子?

【问题讨论】:

  • 您的问题涉及计算机科学的哪个领域?
  • 问了 7 个问题,但没有收到答案!!!!

标签: java programming-languages operators conditional-operator


【解决方案1】:

条件运算符?:right associative,因为右侧首先计算

解释 条件运算符的一个简单表达式是

condition ? value if true : value if false

一个例子是

boolean ? (10+20):(30+40)

在任何情况下,无论是真还是假,它首先评估/计算右侧的值,然后根据条件返回值

Further Explaination: 它在语法上是右关联的(它从右到左分组),因此 a?b:c?d:e?f:g 的含义与 a?b:(c?d:(e?f:g ))。

还要考虑 Wiki 定义

运算符关联性(或固定性)是一个属性,它决定了相同优先级的运算符在没有括号的情况下如何分组强>。”

希望有帮助

【讨论】:

  • 这没有意义,因为普通程序员会期望它首先评估布尔表达式,然后决定评估相应的值。毕竟它是 if/else 结构的简短表示法
  • 公共类 RightAssociative { public static void main(String args[]) { int i=10; int j=true?0:++i; System.out.println(i); } } //i 值 10 而不是 11 根据你,谢谢
  • @Gressie 和 @yagnya 请阅读“进一步解释并查看链接”
  • @Imran 您的进一步解释清楚地表明“未选择的操作数不会针对条件表达式的特定评估进行评估。”这证明了我的观点。 (10+20) 或 (30+40) 仅在布尔表达式表明它应该被评估时才被评估。不这样做会浪费计算时间
  • 它评估一次并且相关,但我在谈论评估路径。
【解决方案2】:

它是右关联的,因为它在 Java Language Specs: 中指定为这样:

条件运算符在语法上是右关联的(它从右到左分组),因此 a?b:c?d:e?f:g 与 a?b:(c?d:( e?f:g))。

原始规范中的引用提供了一个示例(或者至少是一些示例,可用于用 Java 编写基于 main 的快速演示)

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 2011-02-21
    • 1970-01-01
    • 2015-05-20
    • 2013-06-20
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多