Strings Cadenas
Strings: cadenas
En Java, un String es una secuencia de caracteres almacenados internamente en un array de char.
- Cada carácter en Java se representa usando UTF-16, lo que significa que cada carácter ocupa al menos 2 bytes (en la mayoría de los casos).
- Si el carácter está fuera del BMP (Basic Multilingual Plane), como algunos emojis o caracteres especiales, usará 4 bytes debido a los pares sustitutos (surrogate pairs).
🔹 Ejemplo de ocupación de memoria
Supongamos que tenemos un String de 1 millón de caracteres:
String texto = "a".repeat(1_000_000);
🔹 Cada carácter ocupa al menos 2 bytes, por lo que la memoria usada será:
1,000,000 caracteres × 2 bytes = 2 MB
🔹 ¿Y qué pasa con un texto de muchas líneas?
Un String en Java puede contener saltos de línea (\n o \r\n), pero estos son solo caracteres adicionales y siguen ocupando 2 bytes cada uno (en UTF-16).
String multilinea = "Línea 1\nLínea 2\nLínea 3";
System.out.println(multilinea);
Cada \n cuenta como un carácter más, así que la memoria usada sigue aumentando con la cantidad de texto.
Ascii
Las cadenas de texto se pueden codificar usando diferentes charset, si codificamos una cadena a Ascii cada carácter va a ocupar siempre 1 byte
import java.nio.charset.StandardCharsets;
public class AsciiExample {
public static void main(String[] args) {
// Definimos una cadena de texto
String texto = "Hola, mundo!";
// Convertimos la cadena a un array de bytes en ASCII
byte[] asciiBytes = texto.getBytes(StandardCharsets.US_ASCII);
// Convertimos los bytes de vuelta a una cadena usando charset ascii
String textoDecodificado = new String(asciiBytes, StandardCharsets.US_ASCII);
// Mostramos la cadena decodificada
System.out.println("\nDecodificado: " + textoDecodificado);
}
}