我遇到了这段代码:
int a = 1;
int k = ++a + a++ + + 1;
System.out.println(k);
我认为编译器会出错但结果是5?最后一个'+'(加号)符号的目的是什么?是否标志1不是负面或是?为什么Java允许这个作为有效的声明呢?
答案 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