gpt4 book ai didi

java - 强制顺序优先(右结合)

转载 作者:行者123 更新时间:2023-12-02 09:19:03 24 4
gpt4 key购买 nike

强制左关联操作的顺序优先非常容易:10 - 5 + 310 - (5 + 3)

但是,我想知道是否有一种方法可以强制使用右关联运算符这样的优先级?我很难弄清楚。例如,如果我使用 Java,我可以强制 ++= 运算符的优先级吗?

最佳答案

一般来说,更改右关联运算符的求值顺序与更改左关联运算符的计算顺序相同。

当表达式的形式为 a × b × c 时,您可以通过指定 (a × b) × ca × (b × c),无论哪个是默认值。 JLS, §15.7.3状态:

The Java programming language respects the order of evaluation indicated explicitly by parentheses and implicitly by operator precedence.

但是,赋值的结果是一个值,并且赋值运算符的左侧不允许有值,因此 (a = b) = c 始终无效。这与 C++ 等编程语言不同,在 C++ 中,表达式 1 可以计算为可分配的引用。

this answer 中所述,优先级由 Java 编程语言的语法隐式给出。由于赋值运算符的语法已经以不允许运算符左侧的任意表达式的方式定义,特别是这里不支持花括号表达式,因此尝试分配给花括号赋值将已经得到被解析器拒绝。

请注意,类似地,a -> b -> c 是右关联的,但不能更改,如 (a -> b) -> c不是有效的表达式,因为 -> 左侧唯一有效的是参数列表。

Java 中唯一可以改变顺序的右关联表达式是三元运算符,如 a?乙:丙? d: e 被评估为 a? b: (c?d:e),但可以改为(a?b:c)? d: e,如果 bc 计算结果为 boolean 结果,则该值有效。

对于一元运算符的组合,您无法通过插入括号来更改计算顺序。如果您有 op1 op2 value 形式的表达式,但想要使用 op2 op1 value,则只需使用后者。另一件事是,例如- a - b,其中(- a) - b- (a - b)有不同的含义,但那是另一种情况其中涉及二元运算符。

¹ 以变量名或数组索引结尾的除外
² 至少,应该如此。我刚刚注意到 ecj 和 javac 都与规范相矛盾,并且在解析后才拒绝它

关于java - 强制顺序优先(右结合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58810646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com