![](/img/trans.png)
[英]Operator precedence or Maximal Munch Rule comes first for Unary Operators
[英]Understanding Maximal Munch in Java?
我知道Maximal Munch Rule不是Java
特有的,但我的问题只涉及Java
和Java compiler
。
我还读了一些相关的答案:
但我仍然无法完全掌握Maximal Munch及其应用的概念。
如下面的代码所示:
int i = 3;
int j = +i;
System.out.println(i); //3
System.out.println(j); //3
语句int j = +i;
由Java compiler
解释,为什么这有效?
另一个例子, int j = + +i;
也有效,但我不确定如何。
我试图自己理解这个概念,但我无法理解。
我想知道它是如何工作的,它背后的概念以及Java compiler
如何处理这些语句。
加号可用作:
1 + 2
二进制数字加法运算符 "A" + "B"
二进制字符串连接运算符 ++i
一元增量运算符 +i
一元正号运算符(不常见, -i
一元否定符号运算符更常见) 由于正号运算符实际上没有做任何事情,因此可以将其消除。
// All the same
int j = + +i;
int j = +i;
int j = i;
int j = +(+(i));
int j = +(i);
有关更多信息,请参见此处: https : //docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html
这是一元加运算符,表示正值。 坦率地说,这是毫无意义的 - +i
和i
。
您可以从Java语言规范中查看有关词汇翻译的这一部分 :
每个步骤都使用尽可能长的翻译,即使结果最终没有制作正确的程序,而另一个词汇翻译也是如此。 有一个例外:如果词汇翻译发生在类型上下文(§4.11)中,并且输入流有两个或多个连续的
>
字符后跟非>
字符,则每个>
字符必须转换为令牌以用于数值比较运算符>
。输入字符
a--b
被标记化(§3.5)为a
,--
,b
,它不是任何语法正确程序的一部分,即使标记化a
,-
,-
,b
可能是语法正确程序的一部分。
所以在你的情况下:
int j = +i;
被标记为:
int
j
=
(赋值运算符) +
(表示正值的一元加运算符) i
int j = + +i;
被标记为:
int
=
j
+
(表示正值的一元加运算符) +
i
因此,这两个语句与int j = i
完全相同,因为所有+
运算符都被解释为一元加号(无加法+
或增量++
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.