Java中的减量运算

Decrement operation in Java

所以我刚刚开始了一门 IT 课程,作为其中的一部分,我们正在学习 Java 中的编码;我下周有一个作业,虽然我已经弄清楚了,但我只是想知道它为什么有效:P

objective是写了一段代码,读取一个数字,将其递减,将其变为负数,然后输出。

这是我原来的:

  import java.util.Scanner;
  // imports the Scanner utility to Java

  public class Question3 {

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    // defines the scanner variable and sets it to recognize inputs from the user

    System.out.println("Please enter a number: ");
    //prompts captures a number form the screen

    int a = s.nextInt();
    // defines an integer variable('a') as to be  set by input from the scanner

    --a;
    // decrement calculation( by 1)
    -a;     
    //inverts the value of a 

    System.out.println("Your number is: " + a );
    // outputs a line of text and the value of a

但是,Eclipse(我正在使用的 IDE)无法识别一元减号运算符('-'),因此它不起作用。我通过将其编写如下来使其工作:

 import java.util.Scanner;
// imports the Scanner utility to Java

 public class Question3 {

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    // defines the scanner variable and sets it to recognize inputs from the user

    System.out.println("Please enter a number: ");
    //prompts captures a number form the screen

   int a = s.nextInt();
    // defines an integer variable('a') as to be  set by input from the scanner

    --a;
    // decrement calculation( by 1)

    System.out.println("Your number is: " + (-a) );
    // outputs a line of text and the inverse of the variable 'a' 

我的问题是,为什么一元减法在第二个实例中有效,但在第一个实例中无效?

因为你没有赋值一元负的结果。预减包括赋值。

 a = -a; // <-- like this.

在第二次使用(打印)中,您使用的是打印例程中的值(而不是更新 a)。

正如 Elliott Frisch 所解释的,您必须使用否定运算符 (-) 将值重新分配回原始变量,然后才能访问它。

但为什么减量运算符 (--) 不需要你这样做呢?这是因为 a-- 或多或少 syntactic sugar 对于 a = a - 1。它只是写起来更快,而且很常见,每个人都知道它的意思。

--a

类似于

a = a - 1;

这意味着首先它计算 a-1 的值然后用 a = ... 将该值分配回 a.

但在 -a 的情况下,您只是在计算负值,但它不会将其重新分配回 a。因此,由于您没有对该计算值做任何事情,它将丢失,因此编译器会通知您您的代码没有按照您的想法执行。

尝试使用

将该结果显式分配回a
a = -a;

执行此指令后a 将保留您可以在任何地方使用的新值。


当您使用

时,此问题消失
System.out.println("Your number is: " + (-a) );

因为现在编译器发现正在使用计算值 -a(作为传递给 println 方法的值的一部分)。

-   Unary minus operator; negates an expression

你的情况

 -a;  

这是一个声明。

"Your number is: " + (-a) 

这是一个表达式。