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
我的问题是,
return
是方法的出口点,但是从这个方法我发现从方法返回后发生了一些事情。那么回归究竟是如何运作的?
答案 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++;
的操作顺序如下:
评估表达式i++
。
一个。取i
湾增加变量。
返回步骤1生成的表达式的值。
在调用返回之前,方法调用中的表达式的评估已完成(包括增量)。
由于test()的返回值为0,i,e未递增,所以当我打印i时为什么它会递增。
从上面的解释中可以看出,这是因为i
作为表达式评估的一部分而增加了;步骤1b。