De Java String[] a Kotlin: guía completa para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué esta pregunta atormenta a todos los que pasan de Java a Kotlin

\n\n

¿Acabas de empezar a estudiar Kotlin después de Java y ya te has topado con la primera sorpresa? ¿Intentas declarar un array de cadenas como estabas acostumbrado en Java — String[] names = {"Alice", "Bob"} — y el compilador de Kotlin te da un error? Felicidades, no estás solo. La pregunta "What's the Kotlin equivalent of Java's String[]?" ha acumulado miles de visitas en Stack Overflow, y no es casualidad.

\n\n

Kotlin no es solo "Java con azúcar". Google lo posiciona como un lenguaje más moderno, seguro y conciso. Pero esta concisión a veces confunde a los principiantes. En Java, un array es una construcción integrada del lenguaje. En Kotlin, los arrays son parte de la biblioteca estándar y tienen sus propias particularidades.

\n\n

En este artículo, analizaremos todo lo que necesitas saber sobre los arrays de cadenas en Kotlin. No solo aprenderás el análogo directo de String[], sino también alternativas más flexibles que harán tu código más limpio y seguro. ¡Allá vamos!

\n\n

1. El análogo directo: Array<String>

\n\n

La forma más simple y obvia de reemplazar String[] en Kotlin es usar Array<String>. En Kotlin, todos los arrays son objetos de la clase Array<T>, donde T es el tipo de los elementos.

\n\n

¿Cómo declarar e inicializar?

\n\n

En Java escribes:

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

En Kotlin se ve así:

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

Pero hay una forma mucho más corta: usar la función arrayOf():

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

El compilador de Kotlin deduce automáticamente el tipo Array<String>. Ten en cuenta: a diferencia de Java, en Kotlin no hay operador new para crear arrays. En su lugar, se utilizan funciones de fábrica.

\n\n

Diferencia importante: tamaño fijo

\n\n

Al igual que en Java, el tamaño de Array<String> es fijo. No puedes agregar un nuevo elemento después de la creación. Si intentas acceder a un índice fuera de los límites, obtendrás un ArrayIndexOutOfBoundsException.

\n\n
val fruits = arrayOf("Apple", "Banana")\n// fruits[2] = "Cherry" // ¡Error! El índice está fuera de los límites
\n\n

2. Arrays especializados: no siempre Array<String>

\n\n

Para tipos primitivos (Int, Double, Boolean), Kotlin ofrece clases optimizadas: IntArray, DoubleArray, BooleanArray, etc. Estas no utilizan autoboxing/unboxing, lo que ahorra memoria y acelera la ejecución.

\n\n

Pero para cadenas no existe tal optimización, porque String es un tipo de referencia, no un primitivo. Por lo tanto, Array<String> es la única opción si necesitas exactamente un array.

\n\n

3. Alternativa n.º 1: List<String> (lista inmutable)

\n\n

En la mayoría de los casos, no necesitas un array. En Kotlin se recomienda encarecidamente usar listas en lugar de arrays, a menos que trabajes con código de bajo nivel (por ejemplo, JNI u optimización de rendimiento a nivel de nanosegundos).

\n\n

La lista List<String> es una colección inmutable. No puedes cambiar su tamaño ni sus elementos después de la creación. Esto hace que el código sea más seguro en entornos multiproceso.

\n\n
val namesList: List<String> = listOf("Alice", "Bob", "Charlie")\n// namesList[0] = "Eve" // ¡Error! listOf devuelve una lista inmutable
\n\n

En esencia, listOf es el equivalente de Kotlin para Java String[] con protección adicional. En Java, un array se puede modificar accidentalmente al pasarlo a otro método. En Kotlin, List no lo permite.

\n\n

4. Alt

Blogs

Book Recommendations