例:x = 4;y = 5。如何在不引入第三个变量的情况下互换x与y的值?

算术运算

第一种方法是加法。

x = x + y;
y = x - y;
x = x - y;

这个方案的缺陷在于,当x或者y足够大的时候,可能产生溢出。

第二种方法,把加法变为减法,与方案一类似。

x = x - y;
y = x + y;
x = y - x;

当然,改换成乘法除法也可以解决以上问题。但是算术运算要特别注意两个问题:

  1. 溢出问题:在运算过程中可能会产生溢出现象,加法和乘法的产生溢出概率大于减法和除法。
  2. 精度问题:当交换小数的时候,使用算术运算会产生计算精度问题。例:

如果真正的在实践中实现这种功能,还需要加一些特殊判断,比如两个值相等该如何处理,两个值可能会溢出该如何处理(try…catch…)。

异或运算

异或位运算(变成二进制之后进行异或运算),不太好理解。可以参考这篇文章按位异或运算符^.

x ^= y;
y ^= x;
x ^= y;

解构

这个解法是最简单的方法,也不会产生溢出问题:直接运用解构手法,交换x和y的位置。

[x, y] = [y, x];

而这个方法更厉害的地方在于,它不仅仅可以用来交换数值(Number),也可以用来交换其他任意类型数据。

总结

在实际场景中遇到相关问题,推荐使用解构的方法,不仅代码简单,而且也不会产生溢出和计算精度的问题。