Kotlin - kotlin 列表过滤器是否会创建一个新的列表对象?

Kotlin - Do kotlin list filter creates a new list object?

fun main() {
  var list1 = listOf("AAAA", "ASAS", "ADDAD", "AS")
  var list2 = list1
  println(list2 === list1)
  list2 = list2
    .filter { it.length >= 3 }
  println(list2 === list1)
}

以上代码的输出为:

true
false

但我很困惑为什么 list1 没有被修改,因为 list1 和 list2 都首先引用同一个列表对象。任何人都可以帮助我了解这里到底发生了什么吗?

确实,filter 确实创建了一个新列表。

当你这样做时

list2 = list2
    .filter { it.length >= 3 }

您正在将新列表分配给 list2,所以现在 list2 不再引用 list1 所引用的内容,而是开始引用由 [= 创建的列表11=] 代替。因此,list2list1现在指的是不同的东西。