03 值传递和引用传递的不同

vvEcho 2024-07-16 22:55:34
Categories: Tags:
  1. 对象类型(引用值的传递)特点:
    传递的是对象的引用的副本(即内存地址的副本)。
    函数内部可以通过引用修改对象的属性,但不能改变原始引用指向的对象。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class MyObject {
    int value;
    }

    public class Main {
    public static void modifyObject(MyObject obj) {
    obj.value = 10; // 修改对象的属性
    System.out.println("函数内: " + obj.value);//输出10
    }

    public static void main(String[] args) {
    MyObject myObj = new MyObject();
    myObj.value = 5;
    modifyObject(myObj);
    System.out.println("函数外: " + myObj.value);//输出10
    }
    }
  2. 对象引用本身不可修改
    虽然可以通过引用修改对象的属性,但不能改变原始引用指向的对象。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class MyObject {
    int value;
    }

    public class Main {
    public static void changeReference(MyObject obj) {
    obj = new MyObject(); // 试图改变引用
    obj.value = 20;
    System.out.println("函数内: " + obj.value);//输出20
    }

    public static void main(String[] args) {
    MyObject myObj = new MyObject();
    myObj.value = 5;
    changeReference(myObj);
    System.out.println("函数外: " + myObj.value);//输出5
    }
    }
    函数内 obj 被重新赋值,但这不会影响 myObj 的引用。