这个问题在这里已有答案:
在我们的java代码中,我已经包含了一条我不理解为什么的行 total = + - valFromsp;或总= - + valFromsp;所以我写了一个小程序并将其附在此处。
public class Test {
public static void main (String... arg) {
int total = 20;
int valFromsp = 60 ;
total = + - valFromsp;
System.out.println(total); // prints -60
}
}
它只是意味着:
total = -valFromsp;
代码行是赋值语句,右侧表达式为+ - valFromsp
。 + - valFromsp
是什么意思?如果我们添加括号,它就变成了+(-(valFromsp))
。
一元运算符-
在操作数valFromsp
上运行,使其成为-60
。然后+
一元运算符在-60
上运行,不做任何事情。
+
和-
一元运算符在Java语言规范的§15.15中指定:
运算符+, - ,++, - ,〜,!和强制转换运算符(第15.16节)称为一元运算符。
UnaryExpression: PreIncrementExpression PreDecrementExpression + UnaryExpression - UnaryExpression UnaryExpressionNotPlusMinus
在+
中进一步指定使用§15.15.3一元运算符:
对操作数执行一元数字提升(§5.6.1)。一元加表达式的类型是操作数的提升类型。一元加表达式的结果不是变量,而是值,即使操作数表达式的结果是变量。
但是因为你使用的是int
s,它没有进行一元数字促销,所以+
什么都不做。即使你使用byte
,short
或char
,+
仍然无能为力,因为-
一元运算符也会进行推广。因此,没有任何理由同时使用+
和-
。
我建议你把它改成:
total = -valFromsp;
避免将来混淆。
让我开始用一个简单的例子解释一下,考虑一下
total = + valFromsp;
上面一行是指
total = total + valFromsp;
类似于这个total = - + valFromsp
的意思
total = - (total + valFromsp);
现在你可以再次进一步扩展为total = total - (total + valFromsp)
考虑下面给出相同输出的例子
int total = 10;
int val = 50;
//total = - + val; //this is also equals to the below line
total = total - (total + val);
System.out.println(total); //output -50.