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 仓库


原始标题:Kotlin Equivalent to Java String Arrays