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=1var b = 2:变量b被赋值为2,此时b=2
核心交换逻辑
a = b.also { b = a }:
这一行的关键是理解Kotlin的also作用域函数特性:also会先持有调用它的对象的当前值,执行Lambda里的代码后,返回最初持有的那个对象值。- 首先,
b.also(...)会先获取b当前的数值:2,把这个值作为also的"待返回值"存起来 - 执行Lambda块里的代码
b = a:此时a还没被重新赋值,还是初始的1,所以b被更新为1(现在b=1) also函数执行完Lambda后,返回之前存起来的那个初始b值:2- 把这个返回值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
相关产品推荐
相关产品推荐

