在我们的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
}
}
答案 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
不会执行任何操作。即使您使用的是+
,byte
或short
,char
仍然不会执行任何操作,因为+
一元运算符也会进行提升。因此,实际上没有任何理由同时使用-
和+
。
我建议您将其更改为:
-
以避免将来造成混乱。
答案 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.