Java的值传递

来源:互联网 发布:零基础学算法pdf 编辑:程序博客网 时间:2024/06/05 21:06
经典问题,众所周知,java是按值传递。

有人说,是传递的地址;
有人说,是传递了一个副本;
有人说基本类型是按值传递,引用类型是引用传递(这尼玛就是扯!)。

思考如下代码,却输出:c。如此矛盾,隐约透出这个是引用传递?
public class StringDemo {
    public static void main(String[] args) {
        String[] x = new String[]{"a", "b"};
        change(x);
        System.out.println(x[0]);   //输出"c"
    }

    public static void change(String[] y) {
        y[0] = "c";
    }
}
解读:
y首先接收x的地址,该地址指向{"a", "b"},所谓的按值传递。
然后修改y地址指向的内容, {"a", "b"}改为{"c", "b"}。
x的内容自然改变 。


再对比如下代码,输出:a。为何?
public class StringDemo {
    public static void main(String[] args) {
        String[] x = new String[]{"a", "b"};
        change(x);
        System.out.println(x[0]);   //输出"a"
    }

    public static void change(String[] y) {
        y = new String[]{"c", "d"};
    }
}
解读:
y首先接收x的地址,该地址指向{"a", "b"}。
然后y的地址更改为{"c", "d"}地址,并未改变{"a", "b"}的内容。
x的内容不变。


图例堆栈解读,稍后补上。。。。

1 0
原创粉丝点击