如果删除+和++运算符之间的空格会发生什么?
编辑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, +
并不意味着添加,因此您尝试将字符串和整数连接在一起。