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

时间:2019-03-05 07:37:39

标签: java operators

在我们的Java代码中,我遇到了一条我不明白为什么的行
 总计= +-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

    }
}

2 个答案:

答案 0 :(得分:7)

这只是意味着:

css

代码行是一个赋值语句,其右侧的表达式为total = -valFromsp; + - valFromsp是什么意思?如果加上方括号,它将变成+ - valFromsp

一元运算符+(-(valFromsp))对操作数-进行操作,使其成为valFromsp。然后-60一元运算符在+上执行任何操作。

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

  

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

-

§15.15.3中进一步指定了UnaryExpression: PreIncrementExpression PreDecrementExpression + UnaryExpression - UnaryExpression UnaryExpressionNotPlusMinus 一元运算符的使用:

  

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

但是由于您使用的是+,不会进行一元数值提升,所以int不会执行任何操作。即使您使用的是+byteshortchar仍然不会执行任何操作,因为+一元运算符也会进行提升。因此,实际上没有任何理由同时使用-+

我建议您将其更改为:

-

以避免将来造成混乱。

答案 1 :(得分:0)

让我从一个简单的例子开始解释,请考虑

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.