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

本文分享了Java编程中的三个面试常见问题:通过中间变量简化代码理解、利用异或运算进行数据交换以及不借助临时变量实现加法操作。这些技巧有助于提升代码清晰度和效率,并揭示了面试中可能被考察的逻辑思维和算法应用。
摘要由CSDN通过智能技术生成

情况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中的一些总结,不喜勿喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值