深入理解Java中的值传递

值传递与引用传递

值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

在这里插入图片描述
此处的原始对象指的是实参本身。

所以,值传递和引用传递的区别并不是传递的内容。而是实参到底有没有被复制一份给形参。

那么,为什么 Java 中只存在值传递呢?

代码与分析

example 1

public static void main(String[] args) {
    
    
    int num1 = 10;
    int num2 = 20;

    swap(num1, num2);

    System.out.println("num1 = " + num1);
    System.out.println("num2 = " + num2);
}

public static void swap(int a, int b) {
    
    
    int temp = a;
    a = b;
    b = temp;

    System.out.println("a = " + a);
    System.out.println("b = " + b);
}

结果:

a = 20
b = 10
num1 = 10
num2 = 20

在这里插入图片描述

example 2

    public static void main(String[] args) {
    
    
        int[] arr = {
    
     1, 2, 3, 4, 5 };
        System.out.println(arr[0]);
        change(arr);
        System.out.println(arr[0]);
    }

    public static void change(int[] array) {
    
    
        // 将数组的第一个元素变为0
        array[0] = 0;
    }

结果:

1
0

在这里插入图片描述

扫描二维码关注公众号,回复: 12732538 查看本文章

example 3

public class Test {
    
    

    public static void main(String[] args) {
    
    
        // TODO Auto-generated method stub
        Student s1 = new Student("小张");
        Student s2 = new Student("小李");
        Test.swap(s1, s2);
        System.out.println("s1:" + s1.getName());
        System.out.println("s2:" + s2.getName());
    }

    public static void swap(Student x, Student y) {
    
    
        Student temp = x;
        x = y;
        y = temp;
        System.out.println("x:" + x.getName());
        System.out.println("y:" + y.getName());
    }
}

结果:

x:小李
y:小张
s1:小张
s2:小李

在这里插入图片描述

example 4

public static void main(String[] args) {
    
    
   ParamTest pt = new ParamTest();

   User hollis = new User();
   hollis.setName("Hollis");
   hollis.setGender("Male");
   pt.pass(hollis);
   System.out.println("print in main , user is " + hollis);
}

public void pass(User user) {
    
    
   user = new User();
   user.setName("hollischuang");
   user.setGender("Male");
   System.out.println("print in pass , user is " + user);
}

结果:

print in pass , user is User{
    
    name='hollischuang', gender='Male'}
print in main , user is User{
    
    name='Hollis', gender='Male'}

在这里插入图片描述

example 5

public static void main(String[] args) {
    
    
   ParamTest pt = new ParamTest();

   String name = "Hollis";
   pt.pass(name);
   System.out.println("print in main , name is " + name);
}

public void pass(String namePass) {
    
    
   namePass = "hollischuang";
   System.out.println("print in pass , namePass is " + namePass);
}

结果:

print in pass , namePass is hollischuang
print in main , name is Hollis

在这里插入图片描述

最后

通过上面的代码与分析,便可理解 Java 中的值传递机制。

猜你喜欢

转载自blog.csdn.net/qq_44491553/article/details/111116237