为了账号安全,请及时绑定邮箱和手机立即绑定

Java-运算符顺序

Java-运算符顺序

慕桂英4014372 2021-03-28 10:56:21
为什么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
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

对Java代码进行标记后,它将采用Java语言规范第3.2节中规定的最长的Token :

3.2。词汇翻译

使用以下三个词法转换步骤,原始的Unicode字符流被转换为一系列标记:

  1. 将Unicode字符原始流中的Unicode转义(第3.3节)转换为相应的Unicode字符。形式的Unicode转义\uxxxx,其中xxxx是一个十六进制值,表示其编码为的UTF-16代码单元xxxx。此翻译步骤允许仅使用ASCII字符来表示任何程序。

  2. 将步骤1产生的Unicode流转换为输入字符和行终止符流(第3.4节)。

  3. 将步骤2产生的输入字符和行终止符流转换为一系列输入元素(§3.5),这些元素在空格(§3.6)和注释(§3.7)之后被丢弃,由标记(§3.5)组成它们是句法语法(第2.3节)的结尾符号。

即使结果最终不能做出正确的程序,而每个词法都可以使用,最长的翻译也会在每个步骤中使用。

因此,输入的字符- B是记号化(§3.5)为a--b,这是不任何语法正确的方案的一部分,即使该标记化a--b可能是一个语法正确的程序的一部分。


查看完整回答
反对 回复 2021-04-28
?
holdtom

TA贡献1805条经验 获得超10个赞

是的,词法学家只是贪婪的。当找到新的+时,其首要任务是检查它是否可以通过构成多字符运算符的字符(例如++或+ =)来完成

您可以通过a ++ 1和+++ 1之间的差异看到它。一个无效,另一个虽然有效,但仍然有效。


查看完整回答
反对 回复 2021-04-28
  • 2 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信