public class Demo0 {
/*使用第三个临时变量,交换数据,该种操作不会造成数据的溢出现象。
* 优点:方法简单,便于理解
* 缺点:执行效率一般,且还需要定义临时变量。
* */
public static void change01() {
int a=5;
int b=3;
int temp;
System.out.println("交换前:"+"a="+a+",b="+b);
if (a>b)
{
temp=a;
a=b;
b=temp;
}
System.out.println("交换后:"+"a="+a+",b="+b);
}
/*使用使用差值法进行数据的交换,
* 注意:该种方式有可能会造成数据的溢出,在保证数据不会溢出的情况下,使用该种方式。
* 优点:不会使用临时变量,便于理解
* 缺点:有可能会操作会造成数据的溢出
* */
public static void change02() {
int a=5;
int b=3;
System.out.println("交换前:"+"a="+a+",b="+b);
if (a>b)
{
a=a+b;
b=a-b;
a=a-b;
}
System.out.println("交换后:"+"a="+a+",b="+b);
}
/*使用异或的方法进行数据的交换,该种方式不会造成数据的溢出。
*优点:执行效率高,且不会造成数据的溢出。
* 缺点:理解不易。
*
* */
public static void change03() {
int a=5;//对应二进制位0101
int b=3;//对应二进制0011
System.out.println("交换前:"+"a="+a+",b="+b);
/*
* 位异或:对应的位进行异或时,相同为0,不同为1
* */
if (a>b)
{
a=a^b;//异或结果为,二进制0110,十进制6
b=a^b;//异或结果为,二进制0101,十进制5
a=a^b;//异或结果为,二进制0011,十进制3
}
System.out.println("交换后:"+"a="+a+",b="+b);
}
public static void main(String[] args) {
change01();
System.out.println("========");
change02();
System.out.println("========");
change03();
System.out.println("========");
}
}
运行结果:
交换前:a=5,b=3
交换后:a=3,b=5
========
交换前:a=5,b=3
交换后:a=3,b=5
========
交换前:a=5,b=3
交换后:a=3,b=5
========