Kotlin 语言特性与常见陷阱测试题解析
在 Kotlin 开发中,理解编译器的行为、JVM 的底层机制以及语言特性的细节对于编写健壮代码至关重要。许多开发者依赖 IDE 的智能提示和自动补全,这虽然提高了效率,但也可能掩盖了潜在的逻辑错误。本文通过一系列精选的 Kotlin 编程题目,深入探讨了集合操作、函数重载、属性覆写、协变、扩展函数及 Lambda 表达式等核心概念。每道题目均包含代码示例、选项分析及详细解答,旨在帮助开发者理解编译器如何处理代码,避免常见错误并提升对 Kotlin 语言机制的掌握程度。
1. 集合排序方法辨析
题目:
val list = arrayListOf(1, 5, 3, 2, 4)
val sortedList = list.sort()
println(sortedList)
选项: a) [1, 5, 3, 2, 4] b) [1, 2, 3, 4, 5] c) kotlin.Unit d) Will not compile
答案: c
解析:
Kotlin 中的 sort() 函数作用于可变集合(如 ArrayList),它会就地修改原集合的顺序,返回类型为 Unit。而 sorted() 函数会返回一个新的已排序集合,不修改原集合。
最佳实践:
- 如果不需要保留原集合顺序,使用
list.sort()以节省内存。 - 如果需要链式调用或保留原数据,使用
list.sorted()。
2. 集合相等性判断
题目:
println(listOf(1, 2, 3) == listOf(1, 2, 3))
println(listOf(1, 2, 3).asSequence() == listOf(1, 2, 3).asSequence())
println(sequenceOf(1, 2, 3) == sequenceOf(1, 2, 3))
选项: a) true; true; true b) true; true; false c) true; false; true d) true; false; false
答案: d (修正:实际应为 true; false; false)
解析: 在 Kotlin 中, 运算符会调用对象的 方法。


