不明白这段代码的答案(java)

时间:2012-04-06 08:50:44

标签: java

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。 请解释一下。

2 个答案:

答案 0 :(得分:5)

看表达式:

i = i++ + f1(i);

您需要了解的一件事是i++确实做了什么并返回:它会增加i,但会返回{strong>旧值i。因此,如果i == 0,则i++会将i增加到1,但表达式的结果值为0

在Java中,表达式从左到右进行计算。因此,在上面的表达式中,首先评估i++,然后评估f1(i)

i++之后,i == 1因此f1(i)实际上是f1(1)。此方法打印i的值1,后面带逗号,然后返回0

由于i++返回旧值i(在递增之前),表达式变为:

i = 0 + 0;

第一个0i++的结果,第二个0f1(i)的结果。因此,i被分配了0。最后,打印i

的值

答案 1 :(得分:2)

i = i++ + f1(i);

首先我增加到1并调用 f1(1)然后打印 i,,打印 1,并返回0通过计算 0 + 0 在main方法的 i 中存储,然后在main中打印,输出变为 1,0