http://blog.csdn.net/jpzhu16/article/details/50807290
package test; public class IntSwap { /** * 基本思路,增加一个临时变量,进行对调。 */ public static void swap01() { long x1 = System.nanoTime(); int a = 5; //a被调换之前的值 int b = 3; //b被调换之间的值 int temp = 0; //临时变量,赋初值为0,随时赋值是一种好的编程风格 temp = a; //将a赋值给临时变量,此时a就可以解放出来被自由赋值了 a = b; //由于a能自由赋值,将b赋值给a,此时a已经得到调换后的值,而b也可以解放出来被自由赋值了 b = temp; //将临时变量保存的a的值赋值给b System.out.println("a = " + a + " " + "b = " + b); long x2 = System.nanoTime(); System.out.println(x2 - x1); } /** * 基本思路,使用加减运算保存值,实现对调。 */ public static void swap02() { long x1 = System.nanoTime(); int a = 5; int b = 3; a = a + b;//此时a保存了两个需要对调的数的和,不能动,此时如果减去b,得到的值实际上就是a,需要将a的值赋值给b b = a - b; //此时两个数的和仍然被a保存着,但是b已经获取到了a的值, a = a - b; //实现了a,b的对调 System.out.println("a = " + a + " " + "b = " + b); long x2 = System.nanoTime(); System.out.println(x2 - x1); } /** * 基本思路,利用乘除法保存值,实现对调。这道题目的特殊性能保证整型数的除法总能除尽,请思考为什么能除尽。 */ public static void swap03() { long x1 = System.nanoTime(); int a = 5; int b = 3; a = a * b; //此时a保存了两个数的积,不能变动,但是b此时可以自由 b = a / b; a = a / b; //原理和加减法完全一致 System.out.println("a = " + a + " " + "b = " + b); long x2 = System.nanoTime(); System.out.println(x2 - x1); } /** * 基本思路,利用乘除法保存值,实现对调。这道题目的特殊性能保证整型数的除法总能除尽,请思考为什么能除尽。 */ public static void swap() { long x1 = System.nanoTime(); int a = 5; int b = 3; a = a ^ b; b = a ^ b;//实际上相当于 a ^ b ^ b,两次异或之后得到的是a的值,将a赋值给b a = a ^ b;//将b赋值给a System.out.println("a = " + a + " " + "b = " + b); long x2 = System.nanoTime(); System.out.println(x2 - x1); } public static void main(String[] args) { swap01(); swap02(); swap03(); swap(); /* a = 3 b = 5 156747 a = 3 b = 5 19593 a = 3 b = 5 16328 a = 3 b = 5 14928 */ } }