class C{
static int f1(int i) {
System.out.print(i + ",");
return 0;
}
public static void main (String[] args) {
int i = 0;
i = i++ + f1(i);
System.out.print(i);
}
}
为什么答案是 1,0。请解释。
class C{
static int f1(int i) {
System.out.print(i + ",");
return 0;
}
public static void main (String[] args) {
int i = 0;
i = i++ + f1(i);
System.out.print(i);
}
}
为什么答案是 1,0。请解释。
看表达式:
i = i++ + f1(i);
您需要在这里了解的一件事是究竟做了什么i++
并返回:它递增i
,但返回 的旧值i
。所以 if i == 0
, theni++
递增i
到1
,但表达式的结果值为0
。
在 Java 中,表达式是从左到右计算的。所以在上面的表达式中,i++
首先被评估,然后f1(i)
.
之后i++
,其实也是i == 1
如此。此方法打印 的值,即后面带有逗号,并返回。f1(i)
f1(1)
i
1
0
由于i++
返回(在递增之前)的旧值i
,因此表达式变为:
i = 0 + 0;
第一个0
是 的结果i++
,第二个0
是 的结果f1(i)
。所以,i
被赋值0
。最后,打印 的值i
。
i = i++ + f1(i);
首先 i 递增到 1 并调用f1(1),然后打印i ,它打印1 ,并返回 0通过计算0 + 0存储在main 方法的i中,然后在 main 中打印它,因此输出变为1, 0