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

时间:2014-08-21 16:50:12

标签: java

我遇到了这段代码:

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

我认为编译器会出错但结果是5?最后一个'+'(加号)符号的目的是什么?是否标志1不是负面或是?为什么Java允许这个作为有效的声明呢?

3 个答案:

答案 0 :(得分:8)

声明有效地分组如下:

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

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

答案 1 :(得分:6)

  

最后一个'+'(加号)符号的目的是什么?

我假设您了解后增量和预增量在这里做了什么。至于上一个+:您正在使用unary + operator (JLS §15.15.3),就像在

中一样
int a = +1;
int b = 1 + +1;
  

为什么Java允许这个作为有效的声明?

这不是一个有意义的问题。对它的正确答案是“因为JLS说它是允许的”。至于为什么那个的情况,我们只能推测,但为了对称性而使用一元减号合并一元加号是有意义的。一元加号也可用于数字促销;从上面的链接:

  

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

     

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

答案 2 :(得分:5)

是的,那只是一个一元加运算符。当然,its practical uses are fairly limited,但它是有效的Java,因此编译器不会抱怨。

括号:

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

旁注:请勿使用这些前/后增量组合编写实际代码。 :-P