Java中的傳遞機制——值傳遞再次補充附源代碼

接前面發表過的補充文章(文章鏈接),這次增加多了一種情況,原理還是值傳遞原理
寫多一種情況能更方便的理解
情況1:創建副本,更改副本的值,刪去副本,所以結果不變

情況2:創建副本,注意這裏是直接傳入地址。系統自動開闢main棧區和swap_2棧區,都指向a和b所在的值堆,當swap_2棧區更改值後,直接是更改了堆中的值,然後刪去副本,於是原來的main棧指向更改後的堆,所以結果改變

情況3:創建副本,傳入地址值,開闢main棧區和swap_3棧區,都指向a,b所在棧區,只是更改副本的指向值,沒有改變堆中的值,然後刪去副本,於是原來的main棧指向原來的堆,所以結果不變。

情況4:將副本的值變爲空而已,刪去副本,原來main棧區還是指向原來的堆,所以結果不變。

關於值傳遞,終究還是傳遞副本。

@author:肖佳嘉
package com.test;
public class Value_propagation {
	int a ;
	int b ;
	public Value_propagation() {
	}
	public Value_propagation(int i , int j) {
		a  = i ;
		b  = j ;
	}
	public static void main(String[] args) {
		//對四個對象的屬性進行賦值
		Value_propagation vp = new Value_propagation(11,22);
		Value_propagation vp1 = new Value_propagation(11,22);
		Value_propagation vp2 = new Value_propagation(11,22);
		Value_propagation vp3 = new Value_propagation(11,22);
		int c = 11 ;
		int d = 22 ;
		System.out.println("========情況1========");
		//情況1:值相互交換: 結果不變
		vp.swap_1(c, d);
		System.out.println("c = " + c );
		System.out.println("d = " + d );
		System.out.println("========情況2========");
		//情況2:對象的屬性值相互交換,結果改變
		vp.swap_2(vp);
		System.out.println("vp.a = " + vp.a);
		System.out.println("vp.b = " + vp.b);
		System.out.println("========情況3========");
		//情況3:對換對象地址值,結果不變
		vp.swap_3(vp1,vp2);
		System.out.println("vp1.a = " + vp1.a);
		System.out.println("vp1.b = " + vp1.b);
		System.out.println("vp2.a = " + vp2.a);
		System.out.println("vp2.b = " + vp2.b);
		System.out.println("========情況4========");
		//情況4:將對象賦爲null,結果不變
		vp.swap_4(vp3);
		System.out.println("vp3.a = " + vp3.a);
		System.out.println("vp3.b = " + vp3.b);
		
	}
	public void swap_1(int a ,int b) {
		int temp = 0 ;
		temp = a ;
		a = b ;
		b = temp; 
	}
	public void swap_2(Value_propagation vp) {
		int temp = 0 ;
		temp = vp.a ;
		vp.a = vp.b ;
		vp.b = temp; 
	}	
	public void swap_3(Value_propagation vp1,Value_propagation vp2) {
		Value_propagation vp = new Value_propagation();
		vp = vp1;
		vp1 = vp2;
		vp2 = vp1;
	}
	public void swap_4(Value_propagation vp) {
		vp = null; 
	}
}   


測試結果:
======== 情況1 ========
c = 11
d = 22
======== 情況2 ========
vp.a = 22
vp.b = 11
======== 情況3 ========
vp1.a = 11
vp1.b = 22
vp2.a = 11
vp2.b = 22
======== 情況4 ========
vp3.a = 11
vp3.b = 22

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章