值传递与引用传递

值传递

  1. 传递对象的一个副本,即使副本被改变,也不会影响源对象,因为值传递的时候,实际上是将实参的值复制一份给形参;
  2. 原始类型数据(整形、浮点型、字符型、布尔型)传递是值传递
package com.oop.Demo01;

public class Demo04 {
    public static void main(String[] args) {
        //值传递
        int a = 1;

        System.out.println(a);//1

        Demo04.change(a);

        System.out.println(a);//1
    }

    public static void change(int a) {
        a = 10;
    }
}

image
注:int数据类型使用的值传递,所以调用change方法没有返回值的话并不会改变原来a的值

引用传递

  1. 传递的并不是实际的对象,而是对象的引用,外部对引用对象的改变也会反映到源对象上,因为引用传递的时候,实际上是将实参的地址值复制一份给形参。
  2. 对象传递(数组、类、接口)是引用传递
package com.oop.Demo01;

public class Demo05 {
    public static void main(String[] args) {
        //引用传递
        Person person = new Person();
        System.out.println(person.name);//null

        Demo05.change(person);

        System.out.println(person.name);//helloman

    }

    public static void change(Person person) {
        person.name = "helloman";
    }

}

//定义一个类,有名字
class Person {
    String name;
}

image
注:String类型使用的是引用传递,将name指向的值在内存中作出了改变,所以change方法后类的名字发生了改变

posted @ 2022-08-03 18:22  每年桃花开的时候  阅读(30)  评论(0)    收藏  举报