💾 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.
Veamos como funcionaría para la imagen anterior.
-
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.
-
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.
-
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.
-
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.
-
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";
La operación
b = b + c;
Crea un nuevo String que se incluye en el String Pool:
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"
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:
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.
Para acceder a alguno de los métodos siguientes utilizamos la notación "."
String texto = "Clase";
int longitud = texto.length(); //devuelve 5
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.
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:
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);