突然想起以前学习Java的时候,遇到的一个小思考题,今天来简单说一说。
问题:有两个int型变量a,b,如何在不申请额外的变量空间的情况下,实现两值互换?
先抛开这个问题,两值互换的基本思路一般是:
int a = 100;
int b = 400;
int temp = 0;
temp = a;
a = b;
b = temp;
如上已经非常完美的解决了换值问题,可是上面面的问题偏偏又这么一个条件:不申请额外的变量空间
(连个临时变量都不让用,还让不让人愉快的写代码了!!!)
那么有两个基本的思路可以并不完美的解决这个问题:1、求和法。2、做差法
1、求和法:
int a = 100;
int b = 400;
a = a + b;b = a - b;
a = a - b;
2、做差法:
int a = 100;
int b = 400;
a = a - b;b = a + b;
a = b - a;
为什么说“并不完美”呢?因为可能产生溢出问题。
Java语言中变量都是有长度的,所以我们不能保证变量相加或者相减不会溢出哦~
请慎用!!!
难道没有完美的解决方法了吗???
有!!!
3、位运算(异或^)
a = a^b
b = a^b
a = a^b安全!高效!