黑马程序员技术交流社区

标题: 发家帮忙看看这段代码,最后为什么输出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