【问题标题】:Java Operators, + - what is happening in the below code and why it is written like that [duplicate]Java Operators,+ - 下面的代码中发生了什么以及为什么这样写[重复]
【发布时间】:2019-03-05 07:37:39
【问题描述】:

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

    }
}

【问题讨论】:

  • 它打印什么?
  • +- 在这里是一元运算符。这与total = + (-valFromsp) 相同。
  • @ScaryWombat -60
  • @RobbyCornelissen 哦,答案不错

标签: java operators


【解决方案1】:

就是这个意思:

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;

避免日后混淆。

【讨论】:

  • 现在得到澄清,谢谢大家。
  • 以前我没有足够的声望来接受答案,现在我有声望来接受它
【解决方案2】:

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

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.

【讨论】:

  • 你错了,你好像在想+=- + val 完全等同于 -1 * 1 * val-50
猜你喜欢
  • 2018-07-28
  • 2014-05-13
  • 2017-12-27
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多