Java中a和b的值互换有哪些方法

第一种 中间变量

这种是最正常的思维,易于理解。但是缺点是需要中间变量的内存开销。

int t = a;
a = b;
b = t;

第二种 存和求差

相当于我们先让a储存a+b的和,b只需要求出和 - b就是a的值,a可以通过b已经得到的a和自己做差求出b的值。

这种方法稍微不易理解,而且存在溢出风险,在没有确定数据大小的时候应该注意

a=a+b;
b=a-b;
a=a-b;

第三种 异或运算

异或就是对比两个值,“异” 可以理解为“不同”,这个运算符只要前后两个结果不一致就为True

比如:(3>2)  ^   (3>4) = true         (3>2)  ^   (3<4) = false

如果是两个数组进行按位异或运算,那么就是将两个数字转化成二进制表示形式,竖着按照对应的位置进行 ^ 计算(1当做true  0当做false),将计算后的二进制转化为十进制

所以就有了这种写法:

a=a^b;
b=a^b;
a=a^b;

如果还没理解我们来用一组数字做例子,假设a和b均为int类型,且  a = 3  b = 5

第一步:a = a ^ b  = 3 ^ 5 = 6

第二步:b = a ^ b  = 6 ^ 5 = 3   

此时b已经获得了a的值

第三步:a = a ^ b  = 6 ^ 3 = 5

此时a已经获得了b的值

其实这个方法的思想和第二种很类似,但是也存在溢出的风险,但是和第二种相比溢出风险小了很多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员麻薯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值