对于一元运算符,运算符优先级或最大蒙克规则首先出现

Zee*_*han 4 java operator-precedence unary-operator

在这里,我有以下代码:

int a,b,x;
a=b=1;
x=a+++b;
Run Code Online (Sandbox Code Playgroud)

现在,值x将是2,因为a第一个是后递增,然后它被添加到b.

以下是编译的字节代码:

 0  iconst_1
 1  dup
 2  istore_2 [b]
 3  istore_1 [a]
 4  iload_1 [a]
 5  iinc 1 1 [a]
 8  iload_2 [b]
 9  iadd
10  istore_3 [x]
Run Code Online (Sandbox Code Playgroud)

所以表达式将等同于x = (a++) + b.

现在另一个表达式x=a++++b,因为最大的munch规则而不会编译.它将成为x = (a++) ++ b编译错误.

上述行为是x=a+++b因为运算符 ++ 的优先级还是因为最大的munch规则

dev*_*ull 7

引用词汇翻译:

每个步骤都使用尽可能长的翻译,即使结果最终没有形成正确的程序而另一个词汇翻译也会如此.

因此,输入字符a-b被标记化(§3.5)为a,-,b,它不是任何语法正确程序的一部分,即使标记化a,-,-,b可能是语法的一部分正确的程序.

这可以解释原因

x=a+++b
Run Code Online (Sandbox Code Playgroud)

被解析为

x=(a++)+b
Run Code Online (Sandbox Code Playgroud)

另一方面,a++++b被标记为++,++,b,这会导致错误.

  • 你好downvoter,请你留言,以便答案得到改善? (3认同)