Saltar a contenido

💾 String en Java

Un String es un tipo de dato no primitvo que, en Java representa una cadena de caracteres no modificable. Todos los literales de la forma "cualquier texto", es decir, literales entre comillas dobles, que aparecen en un programa java se implementan como objetos de la clase String.

A diferencia de muchos objetos vimos que un String se puede crear sin la palabra new.

String text = "hola";

Creación de String

Se puede crear un String de varias formas.

    String texto = "Severo Ochoa";

    //Utilizando new
    String texto2 = new String("Severo Ochoa");

    //Utilizando el operador concatenación +
    String s2 = text + " 2021";      //s2 contiene "Severo Ochoa 2021"

String - Cadena de caracteres

String es una clase integrada en el lenguaje Java ampliamente utilizada y definido en el paquete java.lang. Representa cadenas de caracteres y se utilizan para almacenar varios atributos como nombre de usuario, contraseña, etc. Los String son inmutables; es decir, no se pueden modificar una vez creados. Siempre que se modifica un objeto String, en realidad se crea uno nuevo String.

Existen varias formas para crear un String:

    String texto = "Severo Ochoa";
    String texto2 = new String("Severo Ochoa");

Asignación de memoria de objetos String

La memoria se divide en dos partes, el String Pool y la memoria Heap.

Java

Veamos como funcionaría para la imagen anterior.

  1. Siempre que creamos un String con comillas dobles, se almacenan en String Pool. String Pool almacena el único valor en él. Es por eso que, String s1 = "blogs" se almacenan como el primer valor en el String Pool.

  2. Siempre que creamos un objeto usando la palabra clave new, se almacena en la memoria Heap pero fuera del String Pool. Aquí se puede almacenar valores duplicados ya que pertenece a diferentes objetos. Entonces, para la declaración String s2 = new String(“blogs”), aunque el valor de s1 y s2 es el mismo, s2 se almacenará fuera del String Pool.

  3. Cuando creamos otro String usando comillas dobles, primero verifica todos los valores en el String Pool y si coincide con alguno se asigna la misma ubicación asignada a otro objeto de referencia. Por lo tanto, String s3 = ”blogs” no agregará una nueva entrada en el String Pool.

  4. Pero si creamos otro objeto con un valor existente usando la palabra clave new. Asignará nueva memoria al nuevo objeto en el Heap. Por lo tanto, a String s4 = new String ("blogs") se le asignará nueva memoria.

  5. Ahora, si manipulamos el valor en s1 usando s1 = ”New“ + s1, no actualizará la entrada o referencia existente de s1. Este proceso creará una nueva entrada en el String Pool con el valor "New blogs" y la referencia de memoria cambiaría para el objeto s1.

Java String Class Methods

La clase java.lang.String proporciona muchos métodos útiles para realizar operaciones en la secuencia de valores char.

El operador concatenación

La clase proporciona el operador + (concatenación) para unir dos o más String. El resultado de aplicar este operador es un nuevo String concatenación de los otros. Por ejemplo, si tenemos dos String b y c:

String b = "Ordenador";
String c = " Portátil";

String

La operación

b = b + c;

Crea un nuevo String que se incluye en el String Pool:

String

Concatenación con otros tipos de datos

Cuando concatenas una cadena con otros tipos de datos, Java convierte automáticamente los tipos no cadena a su representación de cadena.

Cuando concatenas un número con una cadena, Java convierte el número a una cadena de caracteres y luego lo une a la cadena original.

int numero = 10;
double decimal = 5.5;
String texto = "El resultado es: ";

String resultado = texto + numero + " y " + decimal;
System.out.println(resultado);
//imprime  "El resultado es: 10 y 5.5"

String

Operador suma vs Operador concatenación

En Java, cuando se mezcla la suma con la concatenación (operador +), el comportamiento depende del orden de las operaciones. El operador + puede funcionar tanto como un operador de suma para números como un operador de concatenación para cadenas.

El compilador, si no hay paréntesis, opera de izquierda a derecha, y el resultado puede variar de nuestras intenciones. Si se encuentra con un String, los elementos de la derecha los transforma a String, pero si los números están a la izquierda, realiza primero las operaciones de suma

//Muestra "suma = 23"
System.out.println("Suma = "+2+3);

//Muestra "suma = 5". Primero opera el contenido entre paréntesis
System.out.println("Suma = "+(2+3));

//Muestra "5 es la suma"
System.out.println(2+3+" es la suma");

Índices

Cada uno de los caracteres que forman un String son del tipo primitivo char. Los caracteres de un string están numerados internamente con índices empezando desde el cero:

String

El primer carácter tiene índice 0 y el último tiene la longitud del string menos 1.

Métodos de la clase String

La clase String proporciona métodos para el tratamiento de las cadenas de caracteres: acceso a caracteres individuales, buscar y extraer una subcadena, copiar cadenas, convertir cadenas a mayúsculas o minúsculas, etc.

String

Para acceder a alguno de los métodos siguientes utilizamos la notación "."

  String texto = "Clase";
  int longitud = texto.length(); //devuelve 5

String

Tip

Para más información consulta la documentación oficial de la clase String

Comparar Strings

Los operadores relacionales como == o < > NO se utilizan para comparar Strings, aunque el código compile no es correcto, ya que == compara objetos, y devolvería falso aunque dos strings tuvieran el mismo texto puesto que son objetos diferentes.

Para comparar strings utilizamos el método equals.

  String name = "Patri";

  if (name.equals("Patri")) {
    System.out.println("Coincide.");
  }

La siguiente tabla muestra los métodos que se utilizan para comparar Strings.

String

char dentro de String

Como se ha comentado, un String está compuesto de caracteres tipo char.

Para acceder a los caracteres dentro de un String usamos el método charAt.

Se puede usar la concatenación + para concatenar char con String.

String food = "cookie";
char firstLetter = food.charAt(0); // 'c'
System.out.println(firstLetter + " is for " + food); 

También podemos recorrer el String con un bucle for e imprimir cada uno de los caracteres que lo forman.

String major = "CSE";
for (int i = 0; i < major.length(); i++) {
  char c = major.charAt(i);
  System.out.println(c);
}
OUTPUT
C
S
E

char

A todos los valores char se les asigna un número internamente por el ordenador, son los llamados valores ASCII. Por ejemplo:

el carácter 'A' es 65 en código ASCII

el carácter 'a' es 97 en código ASCII

Mezclar tipos de datos char e int automáticamente cause una conversión en entero. Por ejemplo:

'a' + 10 → devuelve 107.

Para convertir un entero en su equivalente a carácter (char) haríamos:

(char) ('a' + 2) → devuelve 'c'.

Diferencias entre char y String

  • String es un objeto, por tanto, contiene métodos.
  • char es un tipo de dato primitivo, no puedes llamar a métodos con él.
  • String utiliza comillas dobles.
  • char utiliza comillas simples.
  • No se puede comparar un String usando operadores relacionales.
  • Si se puede comparar un char usando operadores relacionales: 'a' < 'b', 'X' == 'X', ...

Secuencia de escape

Un carácter precedido por una barra invertida () es una secuencia de escape y tiene un significado especial para el compilador. La siguiente tabla muestra las secuencias de escape de Java:

Java

Nos permiten representar tabulaciones, saltos de línea, el propio caracter \ o "

/*imprime:
Java
Es un lenguaje "Increíble"
Tengo que trabajar duro para aprenderlo
  */        
String miTexto="Java\nEs un lenguaje \"Increíble\"\nTengo que trabajar duro para aprenderlo";
System.out.println(miTexto);

Las versiones actuales de Java, nos permiten definir texto sin necesidad de los caracteres scape utilizando """

/*imprime:
Java
Es un lenguaje "Increíble"
Tengo que trabajar duro para aprenderlo
  */        
String miTexto= """
        Java
        Es un lenguaje "Increíble"
        Tengo que trabajar duro para aprenderlo
        """;
System.out.println(miTexto);