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);
    }
}