黑马程序员技术交流社区
标题:
发家帮忙看看这段代码,最后为什么输出a=3,b=4?
[打印本页]
作者:
664941114
时间:
2016-7-10 11:12
标题:
发家帮忙看看这段代码,最后为什么输出a=3,b=4?
public static void main(String[] args) {
int a=3,b=4
method(a,b);
System.out.println(a+" "+b);
}
public static void method(int a,int b){
a=a+1;
b=b+2;
最后为什么输出a=3,b=4?
作者:
逆风搁浅
时间:
2016-7-10 12:02
弹栈了,ab就是原来的34
作者:
cat73
时间:
2016-7-10 13:47
本帖最后由 cat73 于 2016-7-10 13:48 编辑
你可以这么理解,在调用 method 的时候,JVM 另外找了两个地方复制了一份 a 跟 b,然后 method 里修改的是复制后的这两个,原来的值不受影响。
实际原理如果你玩过汇编或者一些偏向底层的语言,如 C 语言,或许好理解一些。
作者:
GorgeousSoul
时间:
2016-7-10 14:33
method方法中并没有返回值, 主方法中的输出语句得不到被改变的a,b,只能输出初始化值a = 3,b = 4。
作者:
GorgeousSoul
时间:
2016-7-10 14:35
method方法中并没有返回值, 主方法中的输出语句得不到被改变的a,b,只能输出初始化值a = 3,b = 4。
作者:
896575538
时间:
2016-7-10 14:46
method 运行完就弹栈了,而你输出的a,b是局部变量,所以不会改变
作者:
yuxing
时间:
2016-7-10 21:43
局部变量,用完就拜拜了~
作者:
张雨
时间:
2016-7-10 22:05
方法用完里面的局部变量也跟着弹栈了。。
作者:
empty3717
时间:
2016-7-10 22:07
学过C语言的话,用形参和实参来理解就容易多了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2