该说明是否正确用于以下后缀增量编码的输出

时间:2018-08-06 18:54:06

标签: java

我遇到了这种编码...只是想确认一下我对输出121的接收方式。

System.out.print(i++ + obj1.operation(i));

在上面的代码中,i为零,但是i在作为参数传递给操作方法时变为1。在方法操作中,system.out.print输出一,并将后递增值2返回到system.out.print以上。在上面的代码中,将i的初始值和方法的返回值相加,即0+2=2,并打印出2。并且在上述代码中,main方法中的局部变量i已增加为1,因此下一条print语句打印1.这是正确的解释吗?

   public class CalculatorJava {
    public static void main(String[] args) {
        int i = 0;
        CalculatorJava obj1 = new CalculatorJava();
        System.out.print(i++ + obj1.operation(i));
        System.out.println(i);
    }

    public int operation(int i) {
        System.out.print(i++);
        return i;
    }
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,不仅main方法而且操作方法都使用局部变量。因此,我们可以将它们视为两个不同的变量。我们将main中的“ i”称为“ mi”,将操作中的“ i”称为“ oi”。上面代码的简化算法如下:

1: assign 0 to mi
2: increase mi by one
4: assign the value of mi to oi
5: increase oi by one
6: print mi and oi
7: print mi

我假设您知道print方法中的加号不是代数的。

正如您在下面的示例代码中看到的那样,如果我们更改i的范围,则将使两种方法使用相同的变量。输出将是122而不是121

public class CalculatorJava {
    static int i = 0;
    public static void main(String[] args) {
        CalculatorJava obj1 = new CalculatorJava();
        System.out.print(i++ + obj1.operation());
        System.out.println(i);
    }

    public int operation() {
        System.out.print(i++);
        return i;
    }
}

进一步阅读:Local Variables and Scope