return语句后的方法会发生什么

时间:2013-11-11 12:12:43

标签: java variables return

public class TestReturn {
     int i = 0;

    public static void main(String[] args) {
        TestReturn t = new TestReturn();

        System.out.println(t.test());
        System.out.println(t.i);
    }

    private int test() {
            return i++;
    }
}

输出

0
1

我的问题是,

  1. 由于test()的返回值为0,因此i,e不递增,所以当我打印i时为什么它会递增。我所知道的是,return是方法的出口点,但是从这个方法我发现从方法返回后发生了一些事情。
  2. 那么回归究竟是如何运作的?

4 个答案:

答案 0 :(得分:7)

简单。

当你return i++ i最初为0. i++被称为 post -increment,其名称为i将在之后增加。

虽然i++递增之前返回值,但该方法在返回main之前完成此语句。返回不会突然停止此声明(评估但不递增)

所以你将返回0,递增它,然后在调用System.out.println(t.i);时看到1。


从技术上讲,i的值存储在堆栈中,类字段递增,然后返回复制的i值。

答案 1 :(得分:1)

这不是问题的回报,而是你对增量后算子的使用。

“return i ++”会发生什么?是返回i的值,然后递增值。这就是为什么你得到0和1作为值。

答案 2 :(得分:0)

如果您想返回1,请提供return ++i;

return i++;将首先返回i,然后递增它;

i++可以被想象为另一个函数(不适用于java艰难的语法) -

preIncrementFunction(int &i){
   int j = *i;
   *i = *i+1;
   return j;
}

因此,打印的值是i的未递增值,但i的值已更改。

答案 3 :(得分:0)

执行语句return i++;的操作顺序如下:

  1. 评估表达式i++

    一个。取i

    的值

    湾增加变量。

  2. 返回步骤1生成的表达式的值。

  3. 在调用返回之前,方法调用中的表达式的评估已完成(包括增量)。

      

    由于test()的返回值为0,i,e未递增,所以当我打印i时为什么它会递增。

    从上面的解释中可以看出,这是因为i作为表达式评估的一部分而增加了;步骤1b。