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所引用的内容,而是开始引用filter创建的列表.因此,list2list1现在指的是不同的事物.

Java相关问答推荐

如何将一些命令写入Chrome控制台,然后使用Java将输出存储在selenium中

如何让TaskView总是添加特定的列来进行排序?

表格栏上的事件过滤器在PFA中不起作用

Java事件系统通用转换为有界通配符

为什么Java中的两个日期有差异?

将带有js文件的 bootstrap 程序导入maven项目时出错

Jakarta CDI强制bean构造/注册遗留事件侦听器

Jolt变换JSON数组问题

使用PDFBox从PDF中删除图像

搜索列表返回多个频道

如何在JavaFX中处理多个按钮

try 从REST API返回对象列表时出错

二进制数据的未知编码/序列化

如何使用MapStrCut转换双向链接

通过Java列表中的某些字段搜索值

当我在Java中有一个Synchronized块来递增int时,必须声明一个变量Volatile吗?

如何制作回文程序?

TinyDB问题,无法解析符号';上下文&

如何用Micrometer&;斯普肯

原始和参数化之间的差异调用orElseGet时可选(供应商)