三种方案来实现交换数:
第一种:
package data.exchange;
/**
* 使用位运算交换数据不需要考虑数据溢出
*
* 位运算:相同是:0 不同:1
*
* */
public class ExchangeByBit
{
public static void main(String[] args)
{
int a = 10;
int b = -5;
System.out.println("交换数据前:a=" + a + ",b=" +b);
a = a^b;
b = a^b;
a = a^b;
System.out.println("交换数据后:a=" + a + ",b=" + b);
}
}
第二种:
package data.exchange;
/**
* 通过运算符交换数据:可能会出现数据溢出
*
* */
public class ExchangeByLogical
{
public static void main(String[] args)
{
int a = 15;
int b = -10;
System.out.println("交换数据前:a=" + a + ",b=" + b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("交换数据后:a=" + a + ",b=" + b);
}
}
第三种:
package data.exchange;
/**
* 借助中间变量,可能越界
*
* */
public class ExchangeByTemp
{
public static void main(String[] args)
{
int a = 10;
int b = 0;
System.out.println("交换前的结果:a=" + a + ",b=" +b);
int temp = a;//把a赋值给temp
a = b; //把b赋值给a
b =temp; //把temp赋给b
System.out.println("交换后的结果:a=" + a + ",b=" + b);
}
}
三种方案比较:
""第二种及第三种都需要考虑数据溢出,如a,b都是byte型的 byte a=127,b=100 那么a = a + b 就报错
""第一种就避免了这种担心