交换两个变量
1 最标准、最推荐:临时变量法(所有语言通用)
temp = a
a = b
b = temp
- 优点:易懂、安全、无坑、速度最快(编译器会优化)
- 适用:所有场景、所有语言、所有类型
2 加减法(不使用临时变量)
a = a + b
b = a - b
a = a - b
原理:
- 第一步把和存在 a 里
- 第二步用和减原来的 b → 得到原来的 a
- 第三步用和减新 b → 得到原来的 b
缺点:
- 可能数值溢出(Python 不存在整数溢出,C 语言等可能会出现)
- 只能用于数字,不能用于浮点数/对象
3 乘除法(几乎不用,仅面试题)
a = a * b
b = a / b
a = a / b
缺点非常多:
- 容易溢出
- 不能有 0
- 不能负数/浮点数
- 速度慢
4 异或(几乎不用,仅面试题)
a = a ^ b
b = a ^ b
a = a ^ b
日常业务开发(Java / Python / JS / C++ 工程):
- 可读性极差,别人看不懂你在干嘛
- 维护成本高,出 bug 很难定位
- 编译器本身会优化普通交换,速度并不会更快
5 解构赋值/元组交换(现代语言专属,最优雅)
Python/JS/Go 等都支持:
a, b = b, a
[a, b] = [b, a];
a, b = b, a
- 本质是语法糖,底层还是临时变量
- 代码极简洁,实际开发首选
6 指针/内存操作(C/C++ 底层)
利用内存地址直接交换:
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
这是 C 语言最标准的交换函数。
7 栈操作(汇编/底层思路)
利用 push/pop 交换:
push a
push b
pop a
pop b
工程里几乎不用。
8 一行表达式交换(C 系炫技)
a ^= b ^= a ^= b;
和异或原理一样,但行为依赖编译器,可能 undefined behavior,不建议用。
9 快速总结(最好记版本)
- 工程开发:临时变量 或 解构赋值
- 面试炫技:异或、加减法
- 底层/嵌入式:指针、汇编

浙公网安备 33010602011771号