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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是一道编程题
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;
        }
}


5 个回复

倒序浏览
如果传递的是基本类型:形式参数的改变不影响实际参数
如果传递的是引用类型:形式参数的改变影响实际参数

你要问的地方传递的是基本类型,所以change()方法里如何变化都不影响实际参数a b的值所以没变,你可可以画图理解。首先main方法进栈 a = 10. b=20, 然后调用change()方法,将a b的值作为传递过去,结果就是change()方法里的a = 20, b=40.但是现在输出的是main方法的a b 所以还是原值
回复 使用道具 举报
楼上讲的很深入了
回复 使用道具 举报
非常感谢   明白了啊
回复 使用道具 举报
change(int a, int b) 和change(String s1, String s2)两个方法内各加一条打印语句看一下结果变化了没,当这两个方法结束后,参数依然指向自己原来的值,
change(int[] arr)保存的是引用,你改变了他们的值,他们的引用指向这些被改变了的值,所以打印结果变化了
回复 使用道具 举报
恩恩 是的 看出差别了  谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马