为什么我在myMethod
内修改的变量不会在该范围之外修改?
public class TestLoop {
public static void main(String[] args) {
myMethod(0, 3);
}
static void myMethod(int i, int j) {
System.out.println("i for:" + i + " j:" + j);
if (i == j)
return;
else {
myMethod(i + 1, j);
System.out.println("after myMethod Call for: i:" + i + " j: " + j);
}
System.out.println("outside i for: " + i);
}
}
答案 0 :(得分:1)
每次调用myMethod(i + 1, j)
时,都会在堆栈上创建新的局部变量i
和j
,并将其初始化为调用者传递给它们的值。
当myMethod()
的每次执行返回时,局部变量i
和j
超出范围。您将返回上一个myMethod()
执行,该执行具有自己的局部变量i
和j
具有自己的值。
最后,当调用堆栈返回到原始myMethod(0,3)
调用时,该执行具有值为i
和j
的局部变量0
和3
。
i
和j
的值永远不会改变。只有多个名为i
和j
的局部变量,每个变量的范围都有限。
答案 1 :(得分:0)
JLS - Chapter 14. Blocks and Statements包含您问题的答案:
break
(§14.15),continue
(§14.16)和return
(§14.17)语句导致可能阻止的控制权转移正常完成包含它们的语句。
控件返回到调用方法的语句。