01-彻底搞懂java的值传递

01-彻底搞懂java的值传递

在java的参数传递中,只有一种情况,就是值传递
值传递指的是在方法中,会将原始变量拷贝一份出来,进行处理

基本数据类型

基本数据类型 值就保存在变量中, 拷贝一份进行修改不会影响原来的数据

package com.kuang.real;

/**
 * java值传递
 *
 * @since 2022-12-14
 */
public class Deliver {

    public void change(int i1) {
        i1 = 100;
    }

    public static void main(String[] args) {
        Deliver deliver = new Deliver();
        int i = 10;
        deliver.change(i);
        System.out.println(i); // 10
    }
}

引用数据类型

如何理解下面的例子?
对于引用类型,变量中存放的是对象的地址,因此,当拷贝引用变量时,拷贝的也是相同的地址,即两个对象指向同一个内存区域,修改内存区域的值,原始变量的值也发生变化。

例一


package com.kuang.real;

/**
 * java值传递
 *
 * @since 2022-12-14
 */
public class Deliver {

    public void change(Person p1) {
        p1.name = "xiaoming";
    }

    public static void main(String[] args) {
        Deliver deliver = new Deliver();
        Person person = new Person();
        person.name = "xiaohong";
        System.out.println(person.name); // xiaohong
        deliver.change(person);
        System.out.println(person.name); // xiaoming

    }
}

class Person {
    String name;
}

从下面的例子可以看出,在change方法中新创建的Person变量,将其地址赋值给p1,对原始的p变量没有影响

例二


package com.kuang.real;

/**
 * java值传递
 *
 * @since 2022-12-14
 */
public class Deliver {

    public void change(int i1) {
        i1 = 100;
    }

    public void change(Person p1) {
        Person person = new Person();
        person.name = "xiaoming";
        p1 = person;
    }

    public static void main(String[] args) {

        Deliver deliver = new Deliver();
        Person person = new Person();
        person.name = "xiaohong";
        System.out.println(person.name); // xiaohong
        deliver.change(person);
        System.out.println(person.name); // xiaohong
    }
}

class Person {
    String name;
}

posted @ 2022-12-14 20:55  Oh,mydream!  阅读(54)  评论(0编辑  收藏  举报