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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[code=java]public class Test {
        public static void main(String[] args){
                int[] array = new int[1];
                int i = 0;
                method_1(array,i);
                System.out.println(array[0]+" "+i);
        }
        public static void method_1(int[] array,int i){
                array[0] = 1;
                i = 1;
        }
}[/code]这个程序中,有一个数组和一个int型变量,用method_1()方法分别改变数组和i的值,为什么最后数组被更改了,i的值却没有更改依然是0,基础不好,求解?

4 个回复

倒序浏览
陈超 黑马帝 2011-11-13 23:03:15
沙发
数组是引用数据类型,在函数传递参数时传递的是数组在堆内存中的地址,
当堆内存中的数据改变时,原数组的指向并没有变。但数组的内容已经改变。
而其中i为局部变量,传递时是将i的值赋给函数的参数,其值并不会因为函数中的参数改变而改变
回复 使用道具 举报
数组一旦定义并初始化后,就不可以更改。
回复 使用道具 举报
[code=java]public class Test {
        public static void main(String[] args){
                int[] array = new int[1];
                int i = 0;                method_1(array,i);
                System.out.println(array[0]+" "+i);
        }
        public static void method_1(int[] array,int i){
                array[0] = 1;               
                i = 1;        
    }
}
运行结果是:1   0
打印出来的array[0] = 1这是因为你在方法method_1()中把array[0]赋值为1了,也就是初始化了array[0],所以当你在主函数中定义一个数组,把数组当做参数传递到method_1()函数中的时候,就会调用这个函数,并执行里面的函数体,这时候就把array[0]赋值为1了。


而i打印出来的结果是0,是因为,你虽然在method_1中定义一个变量i并把它初始化为1,但是当主函数中你定义的i变量传入method_1函数中的时候,i的值是你在主函数中定义的i的参数值,所以最后打印出来的i的结果是0.

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 wudiisss 于 2011-11-14 08:44 编辑

首先你应该明白main函数中的i和method_1中的i不是同一个i,i在两个函数中是存储在不同的存储单元的,一个是main的
一个是method_1的, method_1(array,i)的调用只是把main中的 i 赋值给method_1中的i,在method_1函数运行时,操作的是method_1函数中的i对main函数中的 i 没关系,因此输出的是0,你要是在method_1输出,那肯定是1了

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马