http://blog.youkuaiyun.com/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
*/
}
}