这个加号在Java代码中的作用是什么?

这个加号在Java代码中的作用是什么?,java,Java,我遇到了以下代码: int a = 1; int k = ++a + a++ + + 1; System.out.println(k); 我认为编译器会给出一个错误,但结果是5?最后一个“+”(加号)的字母是什么?是正号表示1不是负号,还是?为什么Java允许将其作为有效语句?该语句有效地分组如下: int k = (++a) + (a++) + (+1); +1是一个有效的数字文本,就像-1,但它仅相当于1语句有效分组如下: int k = (++a) + (a++) + (+1); +

我遇到了以下代码:

int a = 1;
int k = ++a + a++ + + 1;
System.out.println(k);

我认为编译器会给出一个错误,但结果是5?最后一个“+”(加号)的字母是什么?是正号表示1不是负号,还是?为什么Java允许将其作为有效语句?

该语句有效地分组如下:

int k = (++a) + (a++) + (+1);

+1
是一个有效的数字文本,就像
-1
,但它仅相当于
1

语句有效分组如下:

int k = (++a) + (a++) + (+1);

+1
是一个有效的数字文本,就像
-1
一样,但它只相当于
1
是的,这只是一个一元加号运算符。是的,但它是有效的Java,因此编译器不会抱怨

带括号:

int k = (++a) + (a++) + (+1);

旁注:请不要使用这些增量前/增量后组合编写实际代码:-是的,那只是一元加号运算符。是的,但它是有效的Java,因此编译器不会抱怨

带括号:

int k = (++a) + (a++) + (+1);
旁注:请不要使用这些增量前/增量后组合编写实际代码:-P

最后一个“+”(加号)的字母是什么

我假设您了解后增量和预增量在这里的作用。至于最后一个
+
:您正在使用

int a = +1;
int b = 1 + +1;
为什么Java允许将其作为有效语句

这不是一个真正有意义的问题。正确答案是“因为JLS说这是允许的”。至于为什么会这样,我们只能推测,但是为了与一元负数对称,合并一元加号是有意义的。一元加号也可用于数字升级;从上面的链接:

对操作数执行一元数字提升()。一元加号表达式的类型是操作数的提升类型。一元加号表达式的结果不是变量,而是值,即使操作数表达式的结果是变量也是如此

在运行时,一元加号表达式的值是操作数的提升值

最后一个“+”(加号)的字母是什么

我假设您了解后增量和预增量在这里的作用。至于最后一个
+
:您正在使用

int a = +1;
int b = 1 + +1;
为什么Java允许将其作为有效语句

这不是一个真正有意义的问题。正确答案是“因为JLS说这是允许的”。至于为什么会这样,我们只能推测,但是为了与一元负数对称,合并一元加号是有意义的。一元加号也可用于数字升级;从上面的链接:

对操作数执行一元数字提升()。一元加号表达式的类型是操作数的提升类型。一元加号表达式的结果不是变量,而是值,即使操作数表达式的结果是变量也是如此

在运行时,一元加号表达式的值是操作数的提升值


阅读有关增量后和增量前的信息!是关于
++a+a++
部分的问题还是关于
++1
的问题?++a的可能重复增加a并返回新值(2)。加上a++(a++递增并返回上一个值(2)),再加上正1。简化:2+2+(+1)您甚至可以将那些一元
++
-
链接起来:
intk=+++a++++++-++-++-++-++-++-++-1-
的数量为偶数,则code>给出
5
,否则
3
阅读有关增量后和增量前的信息!是关于
++a+a++
部分的问题还是关于
++1
的问题?++a的可能重复增加a并返回新值(2)。加上a++(a++递增并返回上一个值(2)),再加上正1。简化:2+2+(+1)您甚至可以将那些一元
++
-
链接起来:
intk=+++a++++++-++-++-++-++-++-++-1-
的数目为偶数,则code>给出
5
,否则
3