第一种:在main输出,通过反射实现
1 public static void main(String[] args) throws Exception {
2 Integer a = 1;
3 Integer b = 2;
4 swap(a, b);
5 System.out.println("a=" + a + "--------b=" + b);
6 }
7
8 public static void swap(Integer i1, Integer i2) throws Exception {
9 // 这里怎么改,不能在这里输出,使main方法的a,b两值进行交换
10 Integer temp = new Integer(i1.intValue());
11 Field i1Value = i1.getClass().getDeclaredField("value");
12 i1Value.setAccessible(true);
13 i1Value.set(i1, i2.intValue());
14 Field i2Value = i2.getClass().getDeclaredField("value");
15 i2Value.setAccessible(true);
16 i2Value.set(i2, temp);
17
18 }
//第二种简单的交换之类的
1 /**
2 * 交换值演示,演示了空间换时间,和时间换空间的简单例子.
3 *
4 * @author weep
5 *
6 */
7 public class SwapAB {
8 public static void main(String[] args) {
9 // 两种值交换的方式,用中间变量空间复杂度高于不用中间变量,但时间复杂度要低于不用中间变量.
10
11 // 常规写两个值的交换
12 int a = 100;
13 int b = 200;
14 System.out.println("初始值 a=100 b=200");
15 // 中间变量
16 int c;
17
18 // 复制给中间变量,临时存
19 c = a;
20 // 把b的值赋给a.
21 a = b;
22 // 把c中存的a的初始值赋给,至此完成了常规的值交换
23 b = c;
24 System.out.println("a = " + a + ", b = " + b);
25 // 不用中间变量的写法
26 a = a + b;
27 b = a - b;
28 a = a - b;
29
30 System.out.println("a = " + a + ", b = " + b);
31
32 // 第二种不用中间变量,换运算,效率比加法高点
33 a = a ^ b;
34 b = a ^ b;
35 a = a ^ b;
36
37 System.out.println("a = " + a + ", b = " + b);
38
39 }
40 }