如何不用到第三个变量就能进行两个变量的值交换
一般我们在写程序时会有进行两个变量交换的情况,我们一般采用的方法就是用一个临时变量协助交换,那么能不能不用临时变量就能进行交换呢?答案是可以的,这里给出两种方法。
1、巧妙运用两个变量的和
public class Test1 {
public static void main(String[] args) {
int a=2;
int b=89;
a=a+b; //a=91;
b=a-b; //91-89=2;
a=a-b; //91-2=89;
System.out.println("a的值 = "+a); //a的值=89
System.out.println("b的值= "+b); //b的值=2
}
}
2、利用异或
public class Test2{
public static void main(String[] args) {
int a=2;
int b=5;
//利用异或进行交换 一个数对另一个进行两次异或后值为本身;a^b^b==a
a=a^b; //a=7 等同于a^b,注释里的a,b值等于原始数据a,b的值
b=a^b; //b=2 等同于a^b^b
a=a^b; //a=5 这时的b等同于a,这里的a等同于a^b所以等同于a^a^b
System.out.println("a的值 = "+a);//a的值等于5
System.out.println("b的值= "+b); //b的值等于2
}
}
异或的运算是将字符或数字转化成二进制的代码,然后进行运算。比如上面说的
int a = 2 , b = 5;
a =a^b; 这里 2的二进制是 0010, 5的二进制是 0101,结果是 0111,这个数是7。这里把7赋值给a。
b=a^b;这里 a=7,b还是5。在做异或运算 0111 和0101 运算的结果是0010,转换成十进制就是2。
a=a^b;这里 a=7,b=2. 在做异或 0111 和 0010 运算结果是0101,,转换成十进制就是5。异或运算就是这样