Java Operators,+-下面的代码中发生了什么以及为什么这样写

sha*_*ief 3 java operators

在我们的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)

Swe*_*per 6

这只是意味着:

total = -valFromsp;
Run Code Online (Sandbox Code Playgroud)

代码行是一个赋值语句,右边的表达式是+ - valFromsp。什么+ - valFromsp意思 如果加上方括号,则变为+(-(valFromsp))

一元运算符-对操作数valFromsp进行运算-60。然后,+一元运算符会继续-60对其执行任何操作。

+-一元运算符在指定§15.15 Java语言规范:

运算符+,-,++,-,〜、!和强制转换运算符(第15.16节)称为一元运算符。

UnaryExpression: 
    PreIncrementExpression 
    PreDecrementExpression 
    + UnaryExpression
    - UnaryExpression 
    UnaryExpressionNotPlusMinus
Run Code Online (Sandbox Code Playgroud)

§15.15.3中+进一步规定了对一元运算符的使用:

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

但是由于您使用int的是s(不会进行一元数值提升),因此+不会执行任何操作。即使您使用byteshortchar,该操作也不会+执行任何操作,因为-一元运算符也会进行升级。所以真的没有任何理由使用都+-在同一时间。

我建议您将其更改为:

total = -valFromsp;
Run Code Online (Sandbox Code Playgroud)

避免将来出现混乱。