Java中 交换两个值的3种情况(内附注解)

情况1.

新增一个中间变量(容易理解,在开发中常用,不会产生歧义,便于程序员之间的交流。 但在面试中使用,似乎显得低端)

int a = 5;
int b = 6;
int c = a;//先把a赋值给一个空的容器中
a = b;//a = 6
b = c;//c就是a的值5
System.out.println("a的值为: " + a + " b的值为: " + b);

 

情况2.

按位异或(只能是整数,常问面试)

int a = 5;
int b = 6;
a = a ^ b;
b = a ^ b;//a ^ b ^ b = a = 6
a = a ^ b;//a ^ b ^ a = b = 5
System.out.println("a的值为: " + a + " b的值为: " + b);

*异或 相同为1 不同为0

通过异或运算能够使数据中的某些位翻转,其他位不变。
这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。

即:a^b^b=a。

将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。

 a = a ^ b  -->  1010 ^ 1100 1001 
 b = a ^ b  -->  1001 ^ 1100 1010 
 a = a ^ b  -->  1001 ^ 1010 1100 

 

情况3.

相加( 此算法与情况1相比多了些过程,但没有借助临时变量,常问面试)

int a = 5;
int b = 6;
a = a + b;//11
b = a - b;//a + b - b = a = 6
a = a - b;//a + b - a = b = 5
System.out.println("a的值为: " + a + " b的值为: " + b);

 

PS:以上是本人自学Java中的一些总结,不喜勿喷

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值