从 Java String[] 到 Kotlin:初学者完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么这个问题困扰着每个从 Java 转向 Kotlin 的人



您刚刚在学习了 Java 之后开始学习 Kotlin,却遇到了第一个意外?您试图像在 Java 中习惯的那样声明一个字符串数组——String[] names = {"Alice", "Bob"}——而 Kotlin 编译器却报错了?恭喜您,您并不孤单。"Kotlin 中 Java String[] 的等价物是什么?" 这个问题在 Stack Overflow 上获得了数千次浏览,这绝非偶然。



Kotlin 不仅仅是“加了糖的 Java”。Google 将其定位为一种更现代、更安全、更简洁的语言。但这种简洁性有时会让初学者感到困惑。在 Java 中,数组是语言的内置构造。而在 Kotlin 中,数组是标准库的一部分,并且有其自身的巧妙之处。



在本文中,我们将解析您需要了解的关于 Kotlin 字符串数组 的所有内容。您不仅会了解到 String[] 的直接对应物,还会了解到更灵活的替代方案,这些方案将使您的代码更清晰、更安全。我们开始吧!



1. 直接对应物:Array<String>



在 Kotlin 中替换 String[] 最简单、最直接的方法是使用 Array<String>。在 Kotlin 中,所有数组都是 Array<T> 类的对象,其中 T 是元素类型。



如何声明和初始化?



在 Java 中,您这样写:

String[] names = new String[3];names[0] = "Alice";names[1] = "Bob";names[2] = "Charlie";


在 Kotlin 中,它看起来像这样:

val names: Array<String> = arrayOfNulls(3)names[0] = "Alice"names[1] = "Bob"names[2] = "Charlie"


但有一种更简短的方法——使用 arrayOf() 函数:

val names = arrayOf("Alice", "Bob", "Charlie")


Kotlin 编译器会自动推断出类型 Array<String>。请注意:与 Java 不同,在 Kotlin 中 没有 new 运算符 来创建数组。而是使用工厂函数。



重要区别:固定大小



与 Java 一样,Array<String> 的大小是固定的。创建后您无法添加新元素。如果您尝试访问超出长度的索引,将得到 ArrayIndexOutOfBoundsException。



val fruits = arrayOf("Apple", "Banana")// fruits[2] = "Cherry" // 错误!索引越界


2. 专用数组:并不总是 Array<String>



对于原始类型(Int、Double、Boolean),Kotlin 提供了优化类:IntArray、DoubleArray、BooleanArray 等。它们不使用自动装箱/拆箱,从而节省内存并加快执行速度。



但对于字符串,没有这样的优化,因为 String 是引用类型,而不是原始类型。因此,如果您确实需要数组,Array<String> 是唯一的选择。



3. 替代方案 #1:List<String>(不可变列表)



在大多数情况下,您并不需要数组。在 Kotlin 中,强烈建议使用 列表 而不是数组,除非您在处理底层代码(例如 JNI 或纳秒级别的性能优化)。



列表 List<String> 是一个不可变集合。创建后,您无法更改其大小或元素。这使得代码在多线程环境中更安全。



val namesList: List<String> = listOf("Alice", "Bob", "Charlie")// namesList[0] = "Eve" // 错误!listOf 返回不可变列表


本质上,listOf 是 Kotlin 中 Java String[] 的等价物,并带有额外保护。在 Java 中,您可能会在将数组传递给另一个方法时意外修改它。在 Kotlin 中,List 不允许这样做。



4. 替代

博客

书籍推荐