JAVA的swap实现

发布时间 2023-11-29 18:33:59作者: 加固文明幻景

JAVA的swap实现

JAVA不能操作地址,所以不能像CPP那样方便地实现对基本数据类型的swap

  • java中的基本数据类型传递属于引用传递,并不会像c/c++实现指针传递;
  • 通过包装类对象配合反射可以实现数据的交换。

只能通过以下几种方式。

通过数组对象交换

public class TestSwap {

	public static void main(String[] args){
		int a = 3;
		int b = 5;
		System.out.println("交换前:"+"a="+a+" b="+b); 
		//以数组接收后赋值,注意赋值顺序,注意对应关系
		int[] arr = swap(a,b);
		a = arr[0];
		b = arr[1];
		System.out.println("交换后:"+"a="+a+" b="+b); 
	}
	
	//交换
	private static int[] swap(int x, int y){
		//以数组形式返回
		return new int[]{y,x};
	}
}

通过类对象属性交换

public class TestSwap {
	// 定义类变量
	private int a = 3;
	private int b = 5;

	public static void main(String[] args) {
		TestSwap ts = new TestSwap();
		System.out.println("交换前:"+"a="+ts.a+" b="+ts.b); 
		//对象调用
		ts.swap();
		System.out.println("交换后:"+"a="+ts.a+" b="+ts.b);
	}

	//交换  只能运用在对象只有两个类变量时,交换这两个确定的变量
	private void swap() {
		int temp = this.a;
		this.a = this.b;
		this.b = temp;
	}
}

通过自定义包装类对象交换

//MyInteger: 与Integer有些类似,但是其对象可以变值
class MyInteger {   
	private int x;    // 将x作为唯一的数据成员 
	public MyInteger(int xIn) { x = xIn; } // 构造器 
	public int getValue() { return x; }  // 得到值  
	public void setValue(int xIn) { x = xIn;} // 改变值
}

public class Swapping {   
	// swap: 传对象引用 
	static void swap(MyInteger rWrap, MyInteger sWrap) {      
		// 变值过程     
		int t = rWrap.getValue();      
		rWrap.setValue(sWrap.getValue());      
		sWrap.setValue(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);   
	}
}