C++ swap(a,b)和Java swap(a,b)

C++ 採用引用傳遞

void swap(int& a,int& b)
{
    int temp = a;
    a = b;
    b = temp;
}

但在JAVA中用這種方法是行不通的,因爲“Java對普通類型的變量是不支持引用傳遞的”。

  1. 可以像下面這樣通過傳數組(也屬於傳值)的方法來完成對換(在很多排序算法裏面就是這麼幹的):
public static void swap(int[] data, int a, int b) {
        int temp = data[a];
        data[a] = data[b];
        data[b] = temp;
}

包裝類最常用
2. 也可以通過重新定義個類(在JAVA中我們可以通過使用int的包裝類—Integer,然後將其作爲值的引用傳到函數中,但這個Integer包裝類也不允許你來改變它的數據域;但這不防礙我們用自己的包裝類,比如說下面實現的MyInteger):

//MyInteger: 與Integer有些類似,但是其對象可以變值
class MyInteger {   
	private int x;    // 將x作爲唯一的數據成員 
	public MyInteger(int xIn) { x = xIn; } // 構造器 
	public int getValue() { return x; }  // 得到值  
	public void insertValue(int xIn) { x = xIn;} // 改變值
}

public class Swapping {   
	// swap: 傳對象引用 
	static void swap(MyInteger rWrap, MyInteger sWrap) {      
		// 變值過程     
		int t = rWrap.getValue();      
		rWrap.insertValue(sWrap.getValue());      
		sWrap.insertValue(t);   
	}   
	public static void main(String[] args) {      
		int a = 23, b = 47;      
		System.out.println("Before. a:" + a + ", b: " + b);      
		MyInteger aWrap = new MyInteger(a);      
		MyInteger bWrap = new MyInteger(b);      
		swap(aWrap, bWrap);      
		a = aWrap.getValue();      
		b = bWrap.getValue();      
		System.out.println("After.  a:" + a + ", b: " + b);   
	}
}
  1. 由於java 中的參數傳遞都是採用的值傳遞方式,這不防礙我們用swap的時候採用外部內聯的方式:
 public class Swap2 { 
	public static void main(String args[]){ 
		Swap2 sw = new Swap2(1,2); 
		System.out.println("i is" + sw.i); 
		System.out.println("j is" + sw.j); 
		sw.swap(); 
		System.out.println("i is" + sw.i); 
		System.out.println("j is" + sw.j); 
	} 
	int i,j; 
	public Swap2(int i, int j){ 
		this.i = i; 
		this.j = j; 
	} 

	public  void swap(){ 
		int temp; 
		temp = i; 
		i = j; 
		j = temp; 
	} 
} 

public class Swap1 { 
	public static void Swap1(Integer a, Integer b){ 
		Integer temp = a; 
		a = b; 
		b = temp; 
	} 
	public  static  void main(String args[]){ 
		Integer a,b; 
		a = new Integer(10); 
		b = new Integer(20); 
		Swap1.Swap1(a, b); 
		System.out.println("a is " + a); 
		System.out.println("b is " + b); 
	} 
} 

原博客地址

發佈了33 篇原創文章 · 獲贊 22 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章