方法一:算数法

var a = 10,b = 15;
a = b - a;//a = 5, b = 15;
b = b - a;//a = 5, b = 10;
a = a + b;//a = 15, b = 10;

这样看有点蒙吧,需要画张图,就很明晰了。

方法二:位运算

var a=10,b=12; //a = 1010, b = 1100;
a=a^b; //a = 0110, b = 1100;
b=a^b; //a = 0110, b = 1010;
a=a^b; //a = 1100(12), b=1010(10);

方法三:地址运算

类似方法一,只是不是计算其值,而是计算地址。好处是,不是简单类型,也可以实现。

方法四:利用栈

int exchange(int x,int y)
{
 stack S;
 push(S,x);
 push(S,y);
 x=pop(S);
 y=pop(S);
}

其实这个方法似乎有点违规了

方法五:利用数组

var a=1,b=2;a=[b,b=a][0];