You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交换数字:使用临时变量与无临时变量的性能对比及批量场景分析

不用临时变量交换数字?聊聊性能差异

嘿,这个问题我之前被问到过——如何不使用临时变量交换两个数字。当时我给出了两种实现方案:

两种交换实现

  • 使用临时变量的常规交换:
int a = 10; 
int b = 20; 
int temp = a; 
a = b; 
b = temp;
  • 不使用临时变量的算术交换:
int a = 10; 
int b = 20; 
a = a + b; 
b = a - b; 
a = a - b;

性能与场景分析

这个算术交换方法确实能实现需求,但要是聊到性能优劣,得分场景来看:

  • 单次交换场景:两者的性能差异完全可以忽略不计,现代CPU的执行速度快到这点操作根本感受不到区别,纠结这个纯属没必要。

  • 大型数组反转场景:这时候差距就显现出来了,而且算术交换还藏着坑:

    1. 溢出风险:如果数组里的数值很大,a + b很容易触发整数溢出,直接导致交换结果错误,这是比性能更致命的问题;
    2. 实际性能劣势:现代编译器对临时变量交换的优化能力极强——甚至会直接用寄存器操作替代内存读写,效率拉满。而算术交换的三次加减操作是依赖前一步结果的,编译器优化空间很小,实际执行效率反而不如临时变量交换;
    3. 可读性与维护性:临时变量交换的逻辑一目了然,新手都能看懂;算术交换得反应几秒才明白是在做交换,后续维护时很容易让人困惑,成本更高。

内容的提问来源于stack exchange,提问作者JPS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:11:12