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

Kotlin中修改赋值得到的新MutableList,为何原列表也会被修改?

现象原因说明

这是JVM平台编程语言的通用特性:MutableList属于引用类型,变量存储的是堆内存中实际列表对象的地址,而非对象本身的完整拷贝。

  • 你定义list变量时,它指向堆中生成的ArrayList实例内存地址
  • 执行val newL = list赋值操作时,仅把list存储的内存地址复制给了newL,两个变量最终指向同一个列表实例
  • 后续通过newL调用remove、add方法修改的是同一个实例的内容,所以通过list访问时自然也会拿到修改后的结果

规避方案

如果需要修改新列表时不影响原列表,需要主动对原列表做拷贝,调用toMutableList()方法即可生成新的独立列表实例,修改示例如下:

val list: MutableList<String> = ArrayList()
list.add("a")
list.add("b")
list.add("c")
println(list)
// 主动拷贝生成新实例,两个变量后续操作互不影响
val newL = list.toMutableList()
val target = newL.find{it=="c"}
newL.remove(target)
newL.add("z")
println(list)
println(newL)

运行后输出:

[a, b, c]
[a, b, c]
[a, b, z]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:39:03