为什么java只有值传递?

217 阅读1分钟

示例1

public class Test1 {
    public static void main(String[] args) {
        int a = 3;
        System.out.format("before change: a=%d\n", a);
        changeValue(a);
        System.out.format("after change: a=%d\n", a);
    }

    public static void changeValue(int value) {
        value = 5;
    }
}

结果如下:

示例2

public class Test2 {
    public static void main(String[] args) {
        List<String> ll = new ArrayList<>();
        ll.add("Lucy");
        System.out.print("before change: ll = ");
        ll.stream().forEach(x -> {
            System.out.print(x + " ");
        });
        addBob(ll);
        System.out.print("\nafter change: ll = ");
        ll.stream().forEach(x -> {
            System.out.print(x + " ");
        });
    }

    public static void addBob(List<String> ll) {
        ll.add("Bob");
    }
}

结果如下:

示例3

public class Test3 {
    public static void main(String[] args) {
        String s = "Hello";
        System.out.println("before change: s = "+s);
        changeS(s);
        System.out.println("after change: s = "+s);

    }

    public static void changeS(String s) {
        s = s+" world";
    }
}

结果如下:

参考文章: