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

Sar*_*tal 3 java collections kotlin

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

上述代码的输出是:

true
false
Run Code Online (Sandbox Code Playgroud)

但我很困惑为什么 list1 没有被修改,因为 list1 和 list2 首先引用同一个列表对象。谁能帮我理解这里到底发生了什么?

Swe*_*per 5

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

当你这样做时

list2 = list2
    .filter { it.length >= 3 }
Run Code Online (Sandbox Code Playgroud)

您正在将该新列表分配给list2,因此现在list2停止引用引用的内容list1,并开始引用由 创建的列表filter。因此,list2list1现在指的是不同的事物。