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)
这是一个表达式。
所以我刚刚开始了一门 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)
这是一个表达式。