【问题标题】:What happens when a parameter is passed with the -- operator?使用 -- 运算符传递参数时会发生什么?
【发布时间】:2020-01-31 21:34:15
【问题描述】:

我在 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?

【问题讨论】:

  • c-- 是一个后减运算符。这意味着,它减少变量之后它从表达式返回一个值

标签: java variables operators


【解决方案1】:

您可以使用++cc++ 递增,同样,您可以使用--cc-- 递减

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

对于c++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 之前执行。

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多