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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class TestArgsTransfer {
        public static void main(String[] args) {
                TestArgsTransfer tt = new TestArgsTransfer();
                int i = 10;
                int j = 5;
                System.out.println("i:" + i + " j:" + j);//i : 10  j : 5
                tt.swap(i, j);
                System.out.println("i:" + i + " j:" + j);//为啥交换后的值还是i : 10  j : 5
        }
        //定义一个方法,交换两个变量的值
        public void swap(int i,int j){
                int temp = i;
                i = j;
                j = temp;
                System.out.println("i:" + i + " j:" + j);
        }
}

9 个回复

倒序浏览
因为你交换的只是局部变量,对原来的变量无影响的
回复 使用道具 举报
Java里这种规定真是扯淡
回复 使用道具 举报
应为你修改的是局部变量,swap方法出栈后局部变量就消失了
回复 使用道具 举报
局部变量存在于栈内存中,方法调用结束后,所有内容被释放,不会对堆内存中的成员变量造成改变
回复 使用道具 举报
局部变量存在于栈内存中,方法调用结束后,所有内容被释放,不会对堆内存中的成员变量造成改变
回复 使用道具 举报
Mr___dangerous 发表于 2015-11-8 22:36
因为你交换的只是局部变量,对原来的变量无影响的

哦。这个样子啊,谢谢
回复 使用道具 举报
关于堆栈的问题好模糊·····
回复 使用道具 举报
123412 中级黑马 2015-11-9 10:26:24
9#
因为在java中基本数据类型传递的是值,而引用数据类型传递的内存地址值,所以说,上述的i,j是一个基本数据类型,他们在传递的时候,仅仅传递的就是一个值而已,他们自身并没有发生变化。
回复 使用道具 举报
因为交换的是局部变量,局部方法执行完之后就弹出栈了!不会将交换后的值进行返回!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马