1. 程式人生 > 其它 >值傳遞機制

值傳遞機制

Java值傳遞機制

1、基本資料型別

public class ValueTransferTest {
    public static void main(String[] args) {
        int m = 10;
        int n = 20;

        System.out.println("交換前:");
        System.out.println("m = " + m + ", n = " + n);

        ValueTransferTest test = new ValueTransferTest();
        
        test.swap(m, n);

        System.out.println("交換後:");
        System.out.println("m = " + m + ", n = " + n);
    }

    public void swap(int m, int n) {
        int temp = m;
        m = n;
        n = temp;
    }
}

結果

交換前:
m = 10, n = 20
交換後:
m = 10, n = 20

原因

  • 如果引數是基本資料型別,此時實參賦給形參的是實參真實儲存的資料值
  • 就是說,當在main方法裡把實參傳遞給swap方法後,在swap方法裡是交換了m,n的值,但是main方法裡的m,n並沒有變,因為沒有改變main方法中變數儲存的資料值

2、引用資料型別

package com.gzl;

public class ValueTransferTest {
    public static void main(String[] args) {
        Data data = new Data();

        data.m = 10;
        data.n = 20;

        System.out.println("交換前:");
        System.out.println("m = " + data.m + ", n = " + data.n);
        
        ValueTransferTest test = new ValueTransferTest();

        test.swap(data);

        System.out.println("交換後:");
        System.out.println("m = " + data.m + ", n = " + data.n);
    }

    public void swap(Data data) {
        int temp = data.m;
        data.m = data.n;
        data.n = temp;
    }
}

class Data {
    int m;
    int n;
}

結果

交換前:
m = 10, n = 20
交換後:
m = 20, n = 10

原因

  • data變數儲存的是Data物件的引用(地址),而m和n儲存在物件內,無論是實參data還是形參data,都是指向同一個物件,因此修改的也是同一個物件。

總結

  • 如果引數是基本資料型別,此時實參賦給形參的是實參真實儲存的資料值
  • 如果引數是引用資料型別,此時實參賦給形參的是實參儲存資料的地址值