题目:不用临时变量交换两个数的值。
思路1:先用其中一个变量存放它们的积,积除以另一个数即得原来的数。
a = a * b;
b = a / b;
a = a / b;
思路2:乘法可能会导致溢出,所以可以改用加法或减法,因为Java的整型采用补码,加减法即使溢出也不会导致被截掉,最后结果依然正确。
a = a + b;
b = a – b;
a = a – b;
思路3:如果熟悉位运算的话可以直接用^运算来代替,这样保证不会溢出。
a = a ^ b;
b = a ^ b;
a = a ^ b;
无论是加、乘还是异或运算都不会对交换有任何性能提升,因为它们相比用临时变量中转的方法调用了更多的运算指令,而且仍然需要寄存器存放临时值,并不会节省任何的空间。