首先我们大家都知道在C++中做值交换的方法:- void swap(int&a ,int&b){ int temp; temp = a; a = b; b = temp;}
复制代码 但是到了Java这样就不行了,因为“Java对普通类型的变量是不支持引用传递的”,所以我们就只能另辟蹊径了。
1.首先,是传数组,可以完成值的对换(很多排序算法的思路)。- public static void swap(int[] data, int a, int b) { int t = data[a]; data[a] = data[b]; data[b] = t; }
复制代码 2.然后,重新定义一个类。- //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); }}
复制代码 3. 最后,由于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); } }
复制代码![]()
|