ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第106篇 data class 的 equals 与 copy:深浅拷贝的坑

第106篇 data class 的 equals 与 copy:深浅拷贝的坑 前面几节把 Kotlin 的类型系统、并发、编译期都过了一遍,这一节回到最基础也最容易被问的一个点:data class自动生成的equals/hashCode/toString/copy/componentN。它看起来是"语法糖",但边界没讲清就会写出隐蔽 bug——尤其是可变集合参与equals、以及copy后共享同一份可变对象这两件事,在项目里出问题的频率相当高。先把结论放在前面:data class自动生成的equals只比较主构造函数里的属性(按声明顺序逐个用==比较),数组用引用比较,集合用内容比较(List.equals是内容的)。copy是"逐字段取旧值、覆盖指定字段"的新实例,它不会深拷贝——被复用的可变对象仍是同一份引用。这两条决定了它的正确用法:immutable data class 用copy表达状态迁移,含可变成员的要用自定义equals或改用不可变容器。机制背后的执行路径编译器为data class User(val id: String, val tags
返回列表