我知道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
如何处理这些陈述。
答案 0 :(得分:1)
加号可用作:
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
答案 1 :(得分:0)
这是一元加运算符,表示正值。坦率地说,它毫无意义 - +i
与i
相同。
答案 2 :(得分:0)
您可以从Java语言规范中查看this section on lexical translations:
在每个步骤中使用尽可能长的翻译,即使结果最终没有形成正确的程序,而另一个词汇翻译也会。有一个例外:如果在类型上下文中发生词汇翻译(§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
完全相同,因为所有+
运算符都被解释为一元加号(无加法+
或增量++
)。