Java: Cadenas de caracteres (la clase String)

Si estás aprendiendo Java es muy probable que te hayas topado ya con algo llamado String.

Es fundamental que entiendas qué es y cómo se utiliza, puesto que es uno de los tipos de datos más utilizado en Java.

En este artículo vas a encontrar todo lo necesario para comenzar a trabajar con este tipo de dato y, lo más importante, para que comprendas su funcionamiento y puedas utilizarlo de forma correcta.

¿Qué es el tipo String en Java?
¿Cómo se declara un objeto de tipo String en Java?
String es un tipo inmutable
Métodos de la clase String

¿Qué es el tipo String en Java?

String es un tipo de dato, pero debe quedarte claro que String es una clase, no es un tipo primitivo como int o float. Luego profundizaré un poco más sobre esto. Ahora vamos a ver para qué sirve.

El tipo String sirve para almacenar cadenas de caracteres. Desde un único carácter (como una letra), hasta un conjunto de caracteres consecutivos (como una palabra o una frase). Por tanto, ¿puedo decir que un objeto String y una cadena de caracteres son lo mismo? La respuesta es si.

Por ejemplo, todos estos son String en Java:

"a"
"Hola mundo"
"micorrero4.8@mail.com"

Como puedes comprobar todos van encerrados entre comillas dobles («»). Siempre debes declarar las cadenas de caracteres (String) entre comillas dobles, indistintamente de la longitud que tengan.

Otra cosa que puedes apreciar en los ejemplos es que se pueden utilizar diferentes caracteres, como letras, números y caracteres especiales, pero ¿Un dato de tipo String puede contener cualquier carácter? Si, siempre que sea UNICODE (puedes consultar aquí todos los caracteres UNICODE).

¿Cómo se declara un objeto de tipo String en Java?

Ahora que ya tienes más claro qué es un String en Java, te voy a explicar cómo utilizarlo. Para ello, el primer paso es declarar (instanciar) un objeto de tipo String.

Recuerda que en Java la forma de declarar una variable es la siguiente:

tipo identificador[=valor inicial];

En el caso de los objetos no es diferente.

Si vas a trabajar con cadenas necesitarás una variable del tipo apropiado, en este caso de tipo String. Por tanto, para declarar una variable de tipo String tendrás que cumplir con esa sintaxis.

Fíjate en el siguiente fragmento de código:

//1:
String cadena1 = new String("Hola Mundo");
//2:
String cadena2 = "Hola Mundo";

He declarado 2 variables de tipo String a las que he asignado (=) valores iniciales de forma diferente.

En los dos casos he especificado el tipo (String) y después les he proporcionado un identificador a cada una (cadena1 y cadena2 respectivamente):

//1:
String cadena1
//2:
String cadena2

Hasta aquí no hay nada nuevo, la diferencia principal es la forma en la que he inicializado cada variable. Vamos a analizarlas por separado.

(1) En el caso de cadena1 he utilizado el constructor de la clase String. ¿Y qué es eso del constructor? Dicho de manera muy simplificada y para que lo entiendas, un constructor es una función especial que tienen todas las clases en Java y sirve para reservar memoria para los objetos e inicializarlos. No te preocupes mucho por esto ahora porque es un concepto complejo que trataremos más adelante.

Llamo al constructor utilizando el operador new y le paso entre paréntesis la cadena con la que quiero inicializar el String, en este caso «Hola Mundo»:

new String("Hola Mundo");

El resultado final es que cadena1 es un objeto de tipo String con valor «Hola Mundo». Lo puedes comprobar utilizando la salida estándar:

System.out.println(cadena1);

Como podrás comprobar la salida generada es «Hola Mundo».

(2) Vamos a analizar ahora la segunda opción. En este caso no utilizo el constructor de forma explícita, simplemente asigno el valor de la cadena directamente a la variable:

String cadena2 = "Hola Mundo";

Esto no es un problema para Java porque sabe que todo lo que ponemos entre comillas dobles es una cadena, por tanto ejecuta el constructor de String por nosotros aunque no se lo indiquemos directamente.

El resultado será exactamente el mismo que el de cadena1.

Como habrás comprobado es bastante sencillo declarar cadenas. Existen otras formas de hacerlo, pero para empezar a trabajar con cadenas es suficiente.

String es un tipo inmutable

Espero que tengas mucho más claro qué es una cadena de caracteres en Java y cómo declarar cadenas. Pero hay una cosa más que debes tener en cuenta cuando trabajes con objetos String en Java: Los objetos String en Java son inmutables.

¿Pero esto de inmutable qué es? Pude que te lo imagines por el nombre, ¿que no puede cambiar?. Pues si, eso es exactamente. Puede que pienses: «Pues que limitado es esto de las cadenas si no las puedo modificar». Pero espera que te lo explico mejor.

Supongamos que tienes la siguiente cadena:

String cadena = "Hola mundo";

Y quieres modificarla para que todos sus caracteres estén en mayúscula, es decir así: «HOLA MUNDO».

Pues lamento decirte que no puedes. Lo que si puedes hacer es crear una nueva cadena a partir de la original y que esta nueva esté en mayúscula. Mira cómo sería:

String cadena = "Hola mundo";
String cadena2 = cadena.toUpperCase();

En el código anterior utilizo el método toUpperCase() de la clase String. Ese método ya está implementado en Java y convierte todos los caracteres alfabéticos del objeto cadena a mayúscula, pero no lo modifica, en su lugar devuelve una nueva cadena con el resultado. Esa nueva cadena queda guardada en cadena2 tras la asignación (=).

Supón que por las necesidades de tu aplicación la nueva cadena debe estar en la misma variable que la original y no en otra nueva. Bueno, pues puedes hacerlo de esta forma:

String cadena = "Hola mundo";
cadena = cadena.toUpperCase();

Como puedes comprobar es exactamente el mismo código, pero en vez de declarar una nueva variable cadena2 sobrescribo la variable original cadena asignándole directamente el resultado. Ten en cuenta que al hacerlo de esta forma la cadena original se pierde y se sustituye por un nuevo objeto con el resultado. Aunque la variable sea la misma la cadena no lo es.

No lo olvides, las cadenas en Java son inmutables.

Métodos de la clase String

Una vez tengas tus objetos de tipo String llega la parte más interesante: utilizar el objeto, y es aquí donde vas a ver el verdadero potencial de las cadenas de caracteres en Java.

La ventaja de que String sea un objeto y no un tipo primitivo es que tiene implementados un gran número de métodos que permiten realizar operaciones comunes con cadenas. Cada método realizará una acción concreta sobre la cadena (siempre sin modificarla, recuérdalo).

En el apartado anterior viste un pequeño ejemplo con el método toUpperCase(), pero existen muchos más.

En la siguiente tabla puedes consultar algunos de los métodos más importantes de la clase String. Si quieres conocer todos los métodos disponibles puedes consultarlos en la documentación oficial de Oracle:

cadena1.compareTo(cadena2)Compara dos cadenas
cadena1.concat(cadena2)Concatena dos cadenas
cadena.contains(charS)Comprueba si la cadena contiene una secuencia de caracteres
cadena.equals(object)Compara una cadena con un objeto
cadena.indexOf(ch)Devuelve la posición dentro de la cadena que ocupa un carácter
cadena.isEmpty()Comprueba si la cadena está vacía
cadena.length()Devuelve el número de caracteres que contiene la cadena
cadena.replace(charS1, charS2)Sustituye todas las apariciones de charS1 por charS2 dentro de la cadena
cadena.substring(i)
cadena.substring(i, n)
Devuelve el contenido de la cadena desde la posición i hasta el final
Devuelve n caracteres de la cadena desde la posición i
cadena.toLowerCase()Devuelve la cadena con todos los caracteres alfabéticos en minúscula
cadena.toUpperCase()Devuelve la cadena con todos los caracteres alfabéticos en mayúscula

Espero que te haya sido de utilidad y tengas un poco más claro qué son las cadenas de caracteres en Java.

Los comentarios están cerrados.

Subir ↑