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

Kotlin函数传参问题:交换函数报错及ref关键字失效求助

问题分析与解决方案

你的代码存在两个核心问题:

  1. 函数参数默认只读:Kotlin里函数参数默认是val(不可变),所以你在swap函数中给a、b赋值时会报错——只读变量不允许被重新赋值。
  2. 值传递的局限性:即便把参数改成var,由于Int是值类型,函数接收的是变量副本,修改副本不会影响main里的原始变量。另外Kotlin没有类似C#的ref关键字,尝试用ref是无效的。

解决方案1:返回交换后的Pair(最推荐,适合新手)

通过返回Pair<Int, Int>类型将交换后的值返回给调用方,再重新赋值给原始变量:

fun swap(a: Int, b: Int): Pair<Int, Int> {
    // 用你原本的xor逻辑实现交换
    var x = a
    var y = b
    x = x xor y
    y = y xor x
    x = x xor y
    return x to y
    // 也可以直接简化成:return b to a,效果完全一致
}

fun main() {
    var a = 10
    var b = 1000
    // 解构赋值获取交换后的值
    val (newA, newB) = swap(a, b)
    a = newA
    b = newB
    // 注意:Kotlin字符串模板用$符号,不是%
    println("$a, $b")
}

解决方案2:用数组包装(利用引用传递)

数组是引用类型,函数内修改数组元素会直接影响外部:

fun swap(arr: IntArray) {
    if (arr.size < 2) return
    arr[0] = arr[0] xor arr[1]
    arr[1] = arr[1] xor arr[0]
    arr[0] = arr[0] xor arr[1]
}

fun main() {
    var a = 10
    var b = 1000
    val arr = intArrayOf(a, b)
    swap(arr)
    a = arr[0]
    b = arr[1]
    println("$a, $b")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:43:31