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规则?
引用词汇翻译:
每个步骤都使用尽可能长的翻译,即使结果最终没有形成正确的程序而另一个词汇翻译也会如此.
因此,输入字符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,这会导致错误.
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |