【发布时间】:2017-05-17 05:44:05
【问题描述】:
为什么我在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);
}
}
【问题讨论】:
-
“回滚”是什么意思?变量不存在于方法中的其他任何地方,返回后它们怎么可能是任何东西?如果您的意思是对方法的调用不会更改方法外部的变量,那么就是这样。它与
return无关,变量只是不会在外部改变。0或3将如何变化? -
只是一个递归调用,当局部变量满足条件
i==j时终止,阅读局部变量和返回语句 -
您可以在 void 函数中使用
return;,这类似于循环内的break -
您的代码似乎假设调用
myMethod可以更改其变量的值。它不能。 Java 严格按值传递。请参阅stackoverflow.com/questions/40480/… 如果您想从您调用的方法中返回一个值,那么您需要返回该值。
标签: java