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 首先引用同一个列表对象。谁能帮我理解这里到底发生了什么?
事实上,filter确实创建了一个新列表。
当你这样做时
list2 = list2
.filter { it.length >= 3 }
Run Code Online (Sandbox Code Playgroud)
您正在将该新列表分配给list2,因此现在list2停止引用引用的内容list1,并开始引用由 创建的列表filter。因此,list2和list1现在指的是不同的事物。