Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java运算符&x2B;-下面的代码中发生了什么,为什么这样写_Java_Operators - Fatal编程技术网

Java运算符&x2B;-下面的代码中发生了什么,为什么这样写

Java运算符&x2B;-下面的代码中发生了什么,为什么这样写,java,operators,Java,Operators,在我们的java代码中,我遇到了一行我不明白为什么的代码 total=+-valFromsp或总计=-+valFromsp 所以我写了一个小程序并把它附在这里 public class Test { public static void main (String... arg) { int total = 20; int valFromsp = 60 ; total = + - valFromsp; System.o

在我们的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语言规范的中指定了
+
-
一元运算符:

运算符+、-、++、-、~、!,和cast操作员(§15.16)是 称为一元运算符

UnaryExpression: 
    PreIncrementExpression 
    PreDecrementExpression 
    + UnaryExpression
    - UnaryExpression 
    UnaryExpressionNotPlusMinus
+
一元运算符的使用在以下章节中作了进一步说明:

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


但是由于您使用的是
int
s,它不进行一元数字升级,
+
什么也不做。即使您使用的是
byte
short
char
+
也不会执行任何操作,因为
-
一元运算符也会执行提升操作。因此,实际上没有任何理由同时使用
+
-

我建议您将其更改为:

total = -valFromsp;

为了避免将来出现混淆。

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

total = + valFromsp;
上述行表示
total=total+valFromsp

与此类似,
total=-+valFromsp

total = - (total + valFromsp);
现在您可以再次将其进一步扩展为
total=total-(total+valFromsp)

考虑以下给出相同输出的示例


它打印什么?
+
-
是一元运算符。这与
total=+(-valFromsp)
@ScaryWombat相同-60@RobbyCornelissen哦,这是一个很好的回答。现在得到了澄清,谢谢大家。以前我没有足够的声誉来接受这个答案,现在我有了声誉来接受它。你错了,你似乎在想
+=
-+val
仅相当于
-1*1*val
-50
    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.