Kotlin- Kotlin List filter是否会创建一个新列表对象?

发布于 2025-01-31 10:01:49 字数 338 浏览 1 评论 0原文

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首先引用了同一列表对象。谁能帮助我了解这里到底发生了什么?

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

The output of above code is:

true
false

But I am confused why list1 is not being modified since both list1 and list2 are referencing to same list object first. Can anyone please help me understand what exactly is going on here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

同展鸳鸯锦 2025-02-07 10:01:49

确实,过滤器确实创建了一个新列表。

当您这样做时,

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

您将新列表分配给list2,所以现在list2停止参考list1 引用,并开始参考由filter创建的列表。因此,list2list1现在是指不同的东西。

Indeed, filter does create a new list.

And when you do

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

you are assigning that new list to list2, so now list2 stops referring to what list1 refers to, and starts to refer to the list that was created by filter instead. Therefore, list2 and list1 now refers to different things.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文