gpt4 book ai didi

java - 箭头(->)运算符优先级/优先级最低,或者赋值/组合赋值的优先级最低?

转载 作者:行者123 更新时间:2023-12-02 18:40:05 27 4
gpt4 key购买 nike

JLS :

The lowest precedence operator is the arrow of a lambda expression (->), followed by the assignment operators.

遵循哪个方向(增加优先级、降低优先级)? - “followed”意味着赋值具有更高的优先级或更低的优先级(相对于箭头运算符)?我想,是在增加,因为“最低”(箭头)意味着绝对最低。

据我了解,箭头 (->) 应该位于此 Princeton 的最底部。运算符优先级表(位于所有赋值运算符下方),因此箭头 (->) 具有 0(零)优先级(根据该表)。

我的理解正确吗?

ExamTray似乎是说箭头优先级至少与赋值相同...另外还澄清了箭头关联性是 Left->To->Right (与赋值不同)。我没有找到任何有关箭头关联性的 JLS 引用。

我过去一直认为分配优先级基本上是最低的,这是有原因的。

最佳答案

请注意引用的 JLS text 前面的句子:

Precedence among operators is managed by a hierarchy of grammar productions.

Java 语言的语法决定了哪些构造是可能的,并且隐含地决定了运算符的优先级。

甚至是princeton table您已链接状态:

There is no explicit operator precedence table in the Java Language Specification. Different tables on the web and in textbooks disagree in some minor ways.

因此,Java 语言的语法不允许在赋值运算符左侧使用 lambda 表达式,同样,也不允许在 -> 左侧进行赋值。因此,这些运算符之间可能不存在任何歧义,并且优先级规则虽然在 JLS 中明确说明,但变得毫无意义。

这允许编译,例如这样的 gem ,毫无歧义:

static Consumer<String> C;
static String S;
public static void main(String[] args)
{
Runnable r;
r = () -> C = s -> S = s;
}

关于java - 箭头(->)运算符优先级/优先级最低,或者赋值/组合赋值的优先级最低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59068702/

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