1. 概述
在 Java 中,我们习惯使用 String[]
来创建字符串数组。那么在 Kotlin 中,如何实现等价的功能呢?
本文将带你了解 Kotlin 中如何创建基本类型数组和普通对象类型数组,并重点讲解如何创建和初始化字符串数组。
2. 基本类型数组
Kotlin 为基本类型数组提供了专门的类,包括:
ByteArray
ShortArray
IntArray
CharArray
DoubleArray
FloatArray
这些类在底层直接映射到 Java 的基本类型数组,避免了装箱(boxing)和拆箱(unboxing)带来的性能损耗 ✅
举个例子:
@Test
fun `given int array when checked values are correct`(){
val arrayOfPrimitives = IntArray(4)
arrayOfPrimitives[0] = 1
arrayOfPrimitives[1] = 2
arrayOfPrimitives[2] = 4
assertThat(arrayOfPrimitives).containsExactly(1, 2, 4, 0)
}
这段代码创建了一个长度为 4 的 IntArray
,未显式赋值的元素默认初始化为 0
。
3. 普通类型数组
对于普通对象类型(如 Integer
, String
, 自定义类等),Kotlin 提供了泛型类 Array<T>
来创建数组。最常用的方式是使用 arrayOf()
函数:
@Test
fun `given Integer array when checked values are correct`(){
val arrayOfInteger = arrayOf(1,2,3)
assertThat(arrayOfInteger)
.hasOnlyElementsOfTypes(Integer::class.java)
.hasSize(3)
.containsExactly(1,2,3)
}
⚠️ 注意:这里虽然传入的是 Int
字面量,但 arrayOf()
会自动装箱为 Integer
对象。
4. 创建字符串数组
String
是普通类型,因此需要使用 Array<String>
或 arrayOf()
来创建字符串数组。
4.1 创建空数组
@Test
fun `given empty String array when checked there are no values`() {
val arrayOfString = arrayOf<String>()
assertThat(arrayOfString)
.hasOnlyElementsOfTypes(String::class.java)
.isEmpty()
}
4.2 创建带 null 的数组
@Test
fun `given String array with nulls when checked values are correct`(){
val arrayOfString = arrayOfNulls<String>(3)
assertThat(arrayOfString)
.hasSize(3)
.containsOnlyNulls()
}
4.3 直接初始化字符串数组
@Test
fun `given String array when checked values are correct`(){
val arrayOfString = arrayOf("black", "white", "orange")
assertThat(arrayOfString)
.hasOnlyElementsOfTypes(String::class.java)
.hasSize(3)
.containsExactly("black", "white", "orange")
}
4.4 使用统一值初始化
@Test
fun `given String array with same values when checked values are correct`() {
val arrayOfString = Array<String?>(3){"initial value"}
assertThat(arrayOfString)
.hasOnlyElementsOfTypes(String::class.java)
.hasSize(3)
.containsOnly("initial value")
}
4.5 使用索引动态生成值
@Test
fun `given String array initialized with element no when checked values are correct`() {
val arrayOfString = Array<String?>(3){"element no = $it" }
assertThat(arrayOfString)
.hasOnlyElementsOfTypes(String::class.java)
.hasSize(3)
.containsOnly("element no = 0", "element no = 1", "element no = 2")
}
✅ 总结:Kotlin 提供了多种方式来构建 String
数组,使用灵活,推荐优先使用 arrayOf()
。
5. 小结
- Kotlin 为基本类型提供了专用数组类(如
IntArray
),避免装箱拆箱开销 - 普通类型使用
Array<T>
类型,推荐使用arrayOf()
快速创建 - 创建字符串数组时,使用
arrayOf("a", "b")
最为简洁清晰 - 需要初始化为空或默认值时,可使用
arrayOf<String>()
或arrayOfNulls<String>(size)
如需查看完整示例代码,欢迎访问 GitHub 仓库。