Java:为什么允许显式正数?

Java:为什么允许显式正数?,java,operators,Java,Operators,考虑以下Java代码: int result = 0; for (int i = 0; i < 10; i++) { result += 1; } 唯一的区别是,我们现在将有效的+=运算符替换为=+。后者可能看起来像一个操作符,但实际上不是(参见示例)。但是,在进行此更改后,代码仍然可以正常编译。循环显然仍然执行10次迭代,但是结果将是1而不是10 此处发生的情况是,=+的+部分与1关联,而不是与=关联,因此该代码基本上与以下代码相同: int result = 0; for (

考虑以下Java代码:

int result = 0;
for (int i = 0; i < 10; i++) {
    result += 1;
}
唯一的区别是,我们现在将有效的
+=
运算符替换为
=+
。后者可能看起来像一个操作符,但实际上不是(参见示例)。但是,在进行此更改后,代码仍然可以正常编译。循环显然仍然执行10次迭代,但是
结果将是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;
}
在这里,我肯定遗漏了一些东西,这些东西保证了新来者可能会因为这个设计决策而经历额外的困惑/头痛。

一元+运算符不是禁止的

如果参数的类型是
char
byte
short
,则应用一元+后得到的类型是
int

这让你可以写作

char arg = 0;
int foo = +arg;

复合语句<代码>结果+=1
结果=+1是正常的任务。我认为新手应该学习如何编写单元测试,这样可以快速检测到此类错误。:)老实说,新来者可能做得不正确或不正确不应该成为语言规范的基础。它的答案已经很好了:请看一看。谢谢,这是有意义的。但是,在上面的情况下,类型实际上是int,这是没有意义的。类型检查器是否可能发现参数确实是int,并在显式地在“+”前面加上前缀时产生错误?
int value = -42;
value = +value;
// value is still -42.
char arg = 0;
int foo = +arg;