Java中的值傳遞機制
阿新 • • 發佈:2020-10-22
8. 請你解釋什麼是java的值傳遞機制?
變數的賦值 /* * * 關於變數的賦值: * * 如果變數是基本資料型別,此時賦值的是變數所儲存的資料值。 * 如果變數是引用資料型別,此時賦值的是變數所儲存的資料的地址值。 * */ public class ValueTransferTest { public static void main(String[] args) { System.out.println("***********基本資料型別:****************"); int m = 10; int n = m; System.out.println("m = " + m + ", n = " + n); n = 20; System.out.println("m = " + m + ", n = " + n); System.out.println("***********引用資料型別:****************"); Order o1 = new Order(); o1.orderId = 1001; Order o2 = o1;//賦值以後,o1和o2的地址值相同,都指向了堆空間中同一個物件實體。 System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId); o2.orderId = 1002; System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId); } } class Order{ int orderId; } 輸出結果: ***********基本資料型別:**************** m = 10, n = 10 m = 10, n = 20 ***********引用資料型別:**************** o1.orderId = 1001,o2.orderId = 1001 o1.orderId = 1002,o2.orderId = 1002
引數是基本型別 /* * 方法的形參的傳遞機制:值傳遞 * * 1.形參:方法定義時,宣告的小括號內的引數 * 實參:方法呼叫時,實際傳遞給形參的資料 * * 2.值傳遞機制: * 如果引數是基本資料型別,此時實參賦給形參的是實參真實儲存的資料值。 * 如果引數是引用資料型別,此時實參賦給形參的是實參儲存資料的地址值。 * */ public class ValueTransferTest1 { public static void main(String[] args) { int m = 10; int n = 20; System.out.println("m = " + m + ", n = " + n); //交換兩個變數的值的操作 // int temp = m ; // m = n; // n = temp; ValueTransferTest1 test = new ValueTransferTest1(); test.swap(m, n); 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 分析: swap方法執行之後,會彈出棧,呼叫swap方法後面的輸出語句,輸出的是main方法中的m、n的值,
引數是引用型別:此時實參賦給形參的是實參儲存資料的地址值。 public class ValueTransferTest2 { public static void main(String[] args) { Data data = new Data(); data.m = 10; data.n = 20; System.out.println("m = " + data.m + ", n = " + data.n); //交換m和n的值 // int temp = data.m; // data.m = data.n; // data.n = temp; ValueTransferTest2 test = new ValueTransferTest2(); test.swap(data); 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