JAVA的swap实现
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);
}
}