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