Java运算符,+ - 以下代码中发生了什么以及为什么它被编写为[重复]

问题描述 投票:3回答:2

这个问题在这里已有答案:

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

    }
}
java operators
2个回答
6
投票

它只是意味着:

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)。一元加表达式的类型是操作数的提升类型。一元加表达式的结果不是变量,而是值,即使操作数表达式的结果是变量。

但是因为你使用的是ints,它没有进行一元数字促销,所以+什么都不做。即使你使用byteshortchar+仍然无能为力,因为-一元运算符也会进行推广。因此,没有任何理由同时使用+-

我建议你把它改成:

total = -valFromsp;

避免将来混淆。


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.
© www.soinside.com 2019 - 2024. All rights reserved.