Java-方法签名中的变量会发生什么?

问题描述 投票:0回答:1

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

java variables methods pass-by-reference
1个回答
0
投票

您可以使用++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之前执行。

© www.soinside.com 2019 - 2024. All rights reserved.