如果删除+和++运算符之间的空格会发生什么?

编辑1

免责声明: 我知道 +++ 不是真正的运算符,而是没有空格的+++运算符。 我也知道没有理由使用它; 这个问题只是出于好奇。


所以,我很想知道Java中是否需要+++var之间的空格。

这是我的测试代码:

 int i = 0; System.out.println(i); i = i +++i; System.out.println(i); 

打印出:

 0 1 

这就像我期望的那样,就像第一个和第二个+之间有一个空格一样。

然后,我尝试使用字符串连接:

 String s1 = "s " + ++i; System.out.println(s1); // String s2 = "s " +++i; 

打印出:

 s 2 

但是如果第三行是未注释的,则代码不会编译,错误如下:

 Problem3.java:13: unexpected type required: variable found : value String s2 = "s " +++i; ^ Problem3.java:13: operator + cannot be applied to ,int String s2 = "s " +++i; ^ 

是什么导致字符串连接和整数加法之间的行为差​​异?


编辑2

正如在Abhijit的后续问题中所讨论的那样,人们提到的规则(在较短的令牌++之前首先解析较大的令牌++)在本演示中被讨论,它似乎被称为Munchy Munchy规则。

编译器在解析源时会生成最长的令牌,因此当遇到+++时 ,它会将其作为++ +

所以代码

 a +++ b 

永远都是一样的

 (a++) + b 

没有+++运算符。 你有一个postfix ++运算符后跟一个infix +运算符。 这是一个编译错误,因为postfix ++只能应用于变量,而"s "不是变量。

因为你的意思是一个infix +运算符后跟一个前缀++运算符,你需要在运算符之间放置空格。

实际上,你应该这样做。 +++是一种可读性犯罪!

三重加号不是运营商本身,它是两个运营商组合:

三重加上实际上做的是:

a +++ 1 == a ++ + 1;

你要做的是++一个字符串,它是未定义的。

永远不要在代码中使用没有空格的+++; 几乎没有人会知道它做了什么(没有咨询网站)。 而且,大约一个星期后,你不会知道它实际上是做什么的。

+++本身不是运算符。

i = i +++i; 得到i预增量值,然后将其加到i的值并将其存储在i

使用String, +并不意味着添加,因此您尝试将字符串和整数连接在一起。