请考虑以下Java代码:
int result = 0;
for (int i = 0; i < 10; i++) {
result += 1;
}
Run Code Online (Sandbox Code Playgroud)
循环执行10次迭代,因此result在循环终止时保持值10.
现在考虑以下几乎相同的代码:
int result = 0;
for (int i = 0; i < 10; i++) {
result =+ 1;
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是我们现在用有效的+=运算符替换=+.后者可能看起来像一个运算符,但事实上并非如此(参见例如Oracles对Java运算符的介绍).但是,在此更改后代码仍然可以正常编译.循环显然仍然执行10次迭代,但result将是1而不是10.
这里发生的是,+部分=+联营公司与1替代的=,因此代码基本上是一样的:
int result = 0;
for (int i = 0; i < 10; i++) {
result = +1;
}
Run Code Online (Sandbox Code Playgroud)
这又与以下相同:
int result = 0;
for (int i = 0; i < 10; i++) {
result = 1;
}
Run Code Online (Sandbox Code Playgroud)
似乎非常合理的是,新手可能会错误地写=+而不是+=.事实上,我记得几年前我开始学习Java时这样做.
这种行为主要是由于Java允许运算符和操作数之间的任意空格(包括没有空格)以及明确指定数字为正(如result = +1;)的能力.
允许任意空格似乎是有益的,因为您可以根据自己的喜好构建代码.但是,允许显式正数有什么好处?显然,(幸运的是)它并没有把一个已经负数变成正数:
int value = -42;
value = +value;
// value is still -42.
Run Code Online (Sandbox Code Playgroud)
我必须在这里找到一些可以保证新人可能因此设计决定而遇到的额外困惑/头痛的事情.
在一元 +运算符是不是无操作.
如果参数的类型是char,byte或short,则应用一元+后的结果类型是int.
这允许你写
char arg = 0;
int foo = +arg;
Run Code Online (Sandbox Code Playgroud)