我在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
或c++
进行递增,类似地,您可以使用--c
或c--
进行递减
对于++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之前执行。