在我们的Java代码中,我遇到了一条我不明白为什么
total = +-valFromsp;的行。 或 total =-+ valFromsp;
所以我写了一个小程序,并附在这里。
public class Test {
public static void main (String... arg) {
int total = 20;
int valFromsp = 60 ;
total = + - valFromsp;
System.out.println(total); // prints -60
}
}
Run Code Online (Sandbox Code Playgroud)
这只是意味着:
total = -valFromsp;
Run Code Online (Sandbox Code Playgroud)
代码行是一个赋值语句,右边的表达式是+ - valFromsp。什么+ - valFromsp意思 如果加上方括号,则变为+(-(valFromsp))。
一元运算符-对操作数valFromsp进行运算-60。然后,+一元运算符会继续-60对其执行任何操作。
在+和-一元运算符在指定§15.15 Java语言规范:
运算符+,-,++,-,〜、!和强制转换运算符(第15.16节)称为一元运算符。
Run Code Online (Sandbox Code Playgroud)UnaryExpression: PreIncrementExpression PreDecrementExpression + UnaryExpression - UnaryExpression UnaryExpressionNotPlusMinus
§15.15.3中+进一步规定了对一元运算符的使用:
一元数值提升(第5.6.1节)在操作数上执行。一元加表达式的类型是操作数的提升类型。一元加表达式的结果不是变量,而是值,即使操作数表达式的结果是变量也是如此。
但是由于您使用int的是s(不会进行一元数值提升),因此+不会执行任何操作。即使您使用byte,short或char,该操作也不会+执行任何操作,因为-一元运算符也会进行升级。所以真的没有任何理由使用都+和-在同一时间。
我建议您将其更改为:
total = -valFromsp;
Run Code Online (Sandbox Code Playgroud)
避免将来出现混乱。