黑马程序员技术交流社区

标题: 求教一个关于基本参数和引用参数作为形式参数的问题 [打印本页]

作者: 冷锋也温柔    时间: 2014-8-12 23:11
标题: 求教一个关于基本参数和引用参数作为形式参数的问题
这是一道编程题
public class ArgsDemo {
        public static void main(String[] args) {
                int a = 10;
                int b = 20;
                change(a, b);
                System.out.println(a + "---" + b); // 10---20这里输出的是10和20  为什么值不发生变化呢  谁能从原理上解释

                int[] arr = { 1, 2, 3, 4, 5 };
                change(arr);
                for (int x = 0; x < arr.length; x++) {
                        System.out.println(arr[x]);// 2,4,6,8,10
                }

                String s1 = "hello";
                String s2 = "world";
                change(s1, s2);
                System.out.println(s1 + "---" + s2);// hello---world
        }

        public static void change(String s1, String s2) {
                s1 = "haha";
                s2 = "hehe";
        }

        public static void change(int[] arr) {
                for (int x = 0; x < arr.length; x++) {
                        arr[x] *= 2;
                }
        }

        public static void change(int a, int b) {
                a = b;
                b = a + b;
        }
}



作者: 亨利大帝    时间: 2014-8-13 00:24
如果传递的是基本类型:形式参数的改变不影响实际参数
如果传递的是引用类型:形式参数的改变影响实际参数

你要问的地方传递的是基本类型,所以change()方法里如何变化都不影响实际参数a b的值所以没变,你可可以画图理解。首先main方法进栈 a = 10. b=20, 然后调用change()方法,将a b的值作为传递过去,结果就是change()方法里的a = 20, b=40.但是现在输出的是main方法的a b 所以还是原值
作者: 舍我其谁    时间: 2014-8-13 01:16
楼上讲的很深入了
作者: 冷锋也温柔    时间: 2014-8-14 00:12
非常感谢   明白了啊
作者: 嘿~~    时间: 2014-8-14 11:28
change(int a, int b) 和change(String s1, String s2)两个方法内各加一条打印语句看一下结果变化了没,当这两个方法结束后,参数依然指向自己原来的值,
change(int[] arr)保存的是引用,你改变了他们的值,他们的引用指向这些被改变了的值,所以打印结果变化了
作者: 冷锋也温柔    时间: 2014-8-14 23:45
恩恩 是的 看出差别了  谢谢啊




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