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

Kotlin中这段变量交换代码的执行原理是什么?

Kotlin中使用also函数实现变量交换的执行流程解析

先看你给出的完整代码:

fun main() {
    var a = 1
    var b = 2
    a = b.also { b = a }
    println("Values after swap a = $a and b = $b")
}

下面一步步拆解执行过程,帮你理清每一步的变量变化:

  • 初始化阶段:

    • var a = 1:变量a被赋值为1,此时a=1
    • var b = 2:变量b被赋值为2,此时b=2
  • 核心交换逻辑 a = b.also { b = a }:
    这一行的关键是理解Kotlin的also作用域函数特性:also会先持有调用它的对象的当前值,执行Lambda里的代码后,返回最初持有的那个对象值。

    1. 首先,b.also(...)会先获取b当前的数值:2,把这个值作为also的"待返回值"存起来
    2. 执行Lambda块里的代码b = a:此时a还没被重新赋值,还是初始的1,所以b被更新为1(现在b=1)
    3. also函数执行完Lambda后,返回之前存起来的那个初始b值:2
    4. 把这个返回值2赋值给a,此时a被更新为2(现在a=2)
  • 打印阶段:
    此时a=2,b=1,所以输出结果就是Values after swap a = 2 and b = 1,完成了变量交换。

简单来说,这行代码相当于用also临时保存了b的旧值,先把a的旧值给b,再把b的旧值给a,全程不需要额外定义临时变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:43:18