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=] 代替。因此,list2
和list1
现在指的是不同的东西。
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=] 代替。因此,list2
和list1
现在指的是不同的东西。