黑马程序员技术交流社区

标题: 为什么int型变量的值没有被更改? [打印本页]

作者: せR3n、何必装纯    时间: 2011-11-13 22:50
标题: 为什么int型变量的值没有被更改?
[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,基础不好,求解?
作者: 陈超    时间: 2011-11-13 23:03
数组是引用数据类型,在函数传递参数时传递的是数组在堆内存中的地址,
当堆内存中的数据改变时,原数组的指向并没有变。但数组的内容已经改变。
而其中i为局部变量,传递时是将i的值赋给函数的参数,其值并不会因为函数中的参数改变而改变
作者: 肖瑞军    时间: 2011-11-13 23:06
数组一旦定义并初始化后,就不可以更改。
作者: 王新春    时间: 2011-11-14 08:26
[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.
作者: 高双武    时间: 2011-11-14 08:43
本帖最后由 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了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2