Java-运算符顺序

为什么a=b+++c解析为a=b++,+,c?可以是a = b,+,++ c吗?词典工具后是否有任何顺序或规则?


 int a = 20, b = 10, c = 0;


         // a=b+++c is compiled as

         // b++ +c

         // a=b+c then b=b+1

         a = b+++c;

         System.out.println("Value of a(b+c),b(b+1),c = " + a + "," + b + "," + c);

输出 :


Value of a(b+c),b(b+1),c = 10,11,0


慕桂英4014372
浏览 206回答 2
2回答

繁华开满天机

对Java代码进行标记后,它将采用Java语言规范第3.2节中规定的最长的Token :3.2。词汇翻译使用以下三个词法转换步骤,原始的Unicode字符流被转换为一系列标记:将Unicode字符原始流中的Unicode转义(第3.3节)转换为相应的Unicode字符。形式的Unicode转义\uxxxx,其中xxxx是一个十六进制值,表示其编码为的UTF-16代码单元xxxx。此翻译步骤允许仅使用ASCII字符来表示任何程序。将步骤1产生的Unicode流转换为输入字符和行终止符流(第3.4节)。将步骤2产生的输入字符和行终止符流转换为一系列输入元素(§3.5),这些元素在空格(§3.6)和注释(§3.7)之后被丢弃,由标记(§3.5)组成它们是句法语法(第2.3节)的结尾符号。即使结果最终不能做出正确的程序,而每个词法都可以使用,最长的翻译也会在每个步骤中使用。因此,输入的字符- B是记号化(§3.5)为a,--,b,这是不任何语法正确的方案的一部分,即使该标记化a,-,-,b可能是一个语法正确的程序的一部分。

holdtom

是的,词法学家只是贪婪的。当找到新的+时,其首要任务是检查它是否可以通过构成多字符运算符的字符(例如++或+ =)来完成您可以通过a ++ 1和+++ 1之间的差异看到它。一个无效,另一个虽然有效,但仍然有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java