java方法参数传递问题

来源:互联网 发布:短域名生成算法 编辑:程序博客网 时间:2024/04/30 01:56

你是否真的清楚java参数是怎么传递的?下面通过一个测试代码,给出一个结论。欢迎指正。

public class C {    public static void main(String[] args){        //测试基本类型        int a = 10;        changeInt(a,100);        System.out.println(a);        //测试引用类型        String b = "hello";        changeString(b,"how are you?");        System.out.println(b);        //测试数组类型        String[] c = new String[2];        change(c);        for (String i : c){            System.out.println(i);        }        //测试集合类型        List<String> list = new ArrayList<>();        list.add("11");        changeList(list);        System.out.println(list.toString());    }    public static void change(String[] b){        b[0] = "first";        b[1] = "scened";    }    public static void changeString(String a,String b){        a = b;    }    public static void changeInt(int a,int b){       a = b;    }    public static void changeList(List<String> aa){        aa.add("22");    }}

运行的结果:

10
hello
first
scened
[11, 22]


可以看到,基本类型和引用类型的参数传递其实都是值传递。其实是传递的一个参数的值的copy副本。

数组类型和集合类型的参数是直接传递的引用,所以在方法中修改的参数能够直接反应在传递的参数本身上。这点大家尤其注意。


java为什么这么设计,我没有想明白,有一点是不是因为解决内存空间和copy效率的考虑?在Thinking in java 中并没有找到相关的内容。知道的同学能告知下,谢谢。