首页 > 解决方案 > 使用 -- 运算符传递参数时会发生什么?

问题描述

我在Java中遇到了以下代码:

public static void foo (int a, int b) {
    System.out.println("a: " + a);
    System.out.println("b: " + b);
}

public static void main(String[] args) {
    int c = 1;
    foo(c--, c);
    System.out.println("c: " + c);
//The output is:
//a: 1
//b: 0
//c: 0

有人可以解释一下,为什么会这样?我会反过来猜到只有第一个打印语句会受到c--. 但如果它确实永久改变了 c 的值,为什么第一行打印仍然打印 1?

标签: javavariablesoperators

解决方案


您可以使用++cor递增c++,类似地,您可以使用--cor递减c--

对于++cand --c,您实际上是在告诉 Java “更改值,然后使用新值执行某些操作”

对于c++and c--,您是在告诉 java “加载值,然后更改它”。

现在,这就解释了为什么 A 是 1,C 是 0。但是为什么 B 也是 0?

调用函数时,参数按顺序解析。通常这仅在您将方法的直接结果作为参数传递时才相关。

例如,调用 methodX( methodY(), methodZ()) 方法签名所在的位置 void methodX(int a, int b); int methodY();int methodZ();,则方法 Y 将在 Z 之前执行,Z 将在 X 之前执行。


推荐阅读