A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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?

8 个回复

倒序浏览
逆风搁浅 来自手机 中级黑马 2016-7-10 12:02:43
沙发
弹栈了,ab就是原来的34
回复 使用道具 举报
cat73 黑马帝 2016-7-10 13:47:11
藤椅
本帖最后由 cat73 于 2016-7-10 13:48 编辑

你可以这么理解,在调用 method 的时候,JVM 另外找了两个地方复制了一份 a 跟 b,然后 method 里修改的是复制后的这两个,原来的值不受影响。

实际原理如果你玩过汇编或者一些偏向底层的语言,如 C 语言,或许好理解一些。
回复 使用道具 举报
method方法中并没有返回值,  主方法中的输出语句得不到被改变的a,b,只能输出初始化值a = 3,b = 4。
回复 使用道具 举报
method方法中并没有返回值,  主方法中的输出语句得不到被改变的a,b,只能输出初始化值a = 3,b = 4。
回复 使用道具 举报
method 运行完就弹栈了,而你输出的a,b是局部变量,所以不会改变
回复 使用道具 举报
yuxing 中级黑马 2016-7-10 21:43:51
7#
局部变量,用完就拜拜了~
回复 使用道具 举报
张雨 中级黑马 2016-7-10 22:05:05
8#
方法用完里面的局部变量也跟着弹栈了。。
回复 使用道具 举报
学过C语言的话,用形参和实参来理解就容易多了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马