1. 程式人生 > 實用技巧 >Java中的值傳遞機制

Java中的值傳遞機制

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