值傳遞機制
阿新 • • 發佈:2022-12-10
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,都是指向同一個物件,因此修改的也是同一個物件。
總結
- 如果引數是基本資料型別,此時實參賦給形參的是實參真實儲存的資料值
- 如果引數是引用資料型別,此時實參賦給形參的是實參儲存資料的地址值