本帖最后由 阿里云 于 2017-12-6 21:00 编辑
通常我们是这样完成变量交换的:
[Java] 纯文本查看 复制代码
int a = 1;
int b = 2; // 已知两个变量
int temp = a; //定义临时变量
a = b;
b = temp;//利用临时变量完成了交换
除了这样交换变量外,还有一种酷毙方式实现两个变量互换!{:8_492:}
那就是通过异或运算符实现两个变量互换,不借助临时变量,减少系统资源的消耗。代码和分析如下:
[Java] 纯文本查看 复制代码
int a = 1; // 0000 0001
int b = 2; // 0000 0010
// 异或: 相同为false, 不同为true.
// 在二进制中, 按位异或的操作, 值相同为0, 值不同为1
a = a ^ b;
/*
0000 0001
0000 0010
--------- ^
0000 0011 a
*/
b = a ^ b;
/*
0000 0011
0000 0010
--------- ^
0000 0001 b
*/
a = a ^ b;
/*
0000 0011
0000 0001
--------- ^
0000 0010 a
*/
System.out.println(a); // 0000 0010, 即2
System.out.println(b); // 0000 0001, 即1
这种利用按位异或的操作, 不需要使用第三个变量, 节省了创建第三个变量的内存。只需要固定以下3个步骤:
a = a ^ b;
b = a ^ b;
a = a ^ b;
等号右边都一样,很容易记住!变量的类型可以是int、boolean,但是不能为double、char、String,如果使用中遇到问题就看上面的实现过程吧,应该能很快找到出现问题的原因。
|