Java 按值调用还是引用调用

按值调用指方法接收调用者提供的值,
按引用调用指方法接收调用者提供的变量地址。

Java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!

Java 总是按值调用,方法得到的是所有参数值的副本,传递对象时实际上方法接收的是对象引用的副本。

  • 方法不能修改基本数据类型的参数,
    如果传递了一个 int 值 ,改变值不会影响实参,因为改变的是值的一个副本。

  • 可以改变对象参数的状态,但不能让对象参数引用一个新的对象。因为他传入的是地址的副本
    也就是传递的对象,重新让他指向一个新对象是不会改变原本的实参的,只有直接修改那个对象的内容才会改变
    如果传递了一个 int 数组,改变数组的内容会影响实参,而改变这个参数的引用并不会让实参引用新的数组对象。

Java的参数传递是「按值传递」还是「按引用传递」?

public class Test {
    public static void main(String[] args) {
        int[] a = {1,2,3};
        update4(a);
        for (int i : a){
            System.out.print(i);
        }

        User user = new User("张三");
        up2(user);
        System.out.println(user.getName());
    }

    public static void up(User user){
        user = new User("李四"); // 还是张三
    }

    public static void up2(User user){
        user.setName("李四");  // 改变成李四
    }

    public static void update(int[] a){
        int[] b = {3,4,5};
        a = b; // 不变
    }

    public static void update2(int[] a){
        a = new int[]{3, 4, 5};  // 不变
    }

    public static void update3(int[] a){
        int k = 0;
        for (int i : a){
            i = 3 + k;  // 不变
            k++;
        }
    }

    public static void update4(int[] a){
        a[0] = 9;  // 内容改变
    }
}
posted @ 2022-05-07 11:22  张三丰学Java  阅读(84)  评论(0编辑  收藏  举报