快速搞懂值传递与引用传递

传递与引用传递

值传递

  • 基本数据类型作为参数的方法调用
  • 实参给形参传递数据的方式,直接将值复制一份给形参,实参和形参在内存上两个方法中的 互相独立的局部变量 不涉及到引用对内存中的数据,修改形参不会影响实参
  • 示例:
public class test {
    public static void change(int x){
        x=100;
    }


    public static void main(String[] args) {
        int x=10;
        change(x);
        System.out.println(x);
    }
}

输出:
10

在这里插入图片描述

引用传递

  • 在方法调用中,传递的是对象(地址)
  • 实参传递给形参的数据的方式,将对于堆内存中的引用传递给形参,形参和实参在内存就会执行堆内存上的同一个区域,此时修改形参就是在修改实参
  • 示例:
public class test {
    public static void change(Student student1){
        student1.age=100;
    }


    public static void main(String[] args) {
        Student student=new Student(10);
        System.out.println(student.age);
        change(student);
        System.out.println(student.age);
    }
}


class Student{
    int age;


    public Student(int age) {
        this.age = age;
    }
}


输出:
10
100

在这里插入图片描述

注意

  • 基本数据类型的参数是值传递,引用数据类型的参数传递是引用(地址),本质上也是值传递

雷区

public class test {
    public static void change(Student student1){
        student1=new Student(20);
    }




    public static void main(String[] args) {
        Student student=new Student(10);
        System.out.println(student.age);
        change(student);
        System.out.println(student.age);
    }
}




class Student{
    int age;




    public Student(int age) {
        this.age = age;
    }
}


输出:
10

在这里插入图片描述

  • 这种情况也是引用传递,调用的方法时,传的确实是地址,但是执行的代码中,此时又创建了一个新的对象,则此时student1指向的地址不再是之前传递的地址,而是新的地址,故不会改变值。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页