Kotlin中Array、List、MutableList的plus()方法为何不生效?
Kotlin中plus()方法不修改原集合的原因解析
核心原因
Kotlin里的plus()方法(包括对应的+运算符)是不可变操作:它不会修改调用它的原集合,而是返回一个包含原集合元素和新增元素/集合的全新集合。
看你的测试代码:
fun main() { var arr=mutableListOf<Int>(4,5) ; var arr2=mutableListOf<Int>(1,3); arr.add(8); arr2.plus(arr) // 仅生成新集合,但未赋值给arr2,原arr2无变化 println( arr2.size); }
你调用arr2.plus(arr)后,没有接收返回的新集合,所以原arr2的元素和大小完全没改变,输出自然是2。
正确使用plus()的方式
如果要通过plus()实现集合合并,需要把返回的新集合赋值给原变量:
fun main() { var arr=mutableListOf<Int>(4,5) ; var arr2=mutableListOf<Int>(1,3); arr.add(8); arr2 = arr2.plus(arr) // 将新集合赋值给arr2 println( arr2.size); // 输出5,元素为[1,3,4,5,8] }
为什么add()能直接生效
add()是MutableList专属的可变操作,它会直接修改原集合的内部结构,不需要返回新对象,所以调用后原集合的元素会立即增加。
批量修改原集合的替代方案
如果想直接修改原MutableList(不生成新集合),除了单个元素的add(),还可以用addAll()批量添加另一个集合的元素:
arr2.addAll(arr) // 直接修改原arr2,size变为5
内容的提问来源于stack exchange,提问作者Александр Д
相关产品推荐
相关产品推荐

