Sobes.tech
Junior

Háblame de la clase String en el lenguaje de programación Java.

sobes.tech AI

Respuesta de la IA

La clase String en Java representa una secuencia inmutable de caracteres.

Características y particularidades principales:

  • Inmutabilidad: Después de crear un objeto String, su contenido no puede ser modificado. Cualquier operación que parezca modificar la cadena (por ejemplo, concatenación) en realidad crea un nuevo objeto String. Esto mejora la seguridad y la seguridad en entornos multihilo.
  • Sobrecarga del operador +: Para las cadenas, se ha sobrecargado el operador + para realizar concatenaciones.
  • Dos formas de creación:
    • Con un literal de cadena: String s1 = "Hello"; - creado en el pool de cadenas (String Pool).
    • Usando el operador new: String s2 = new String("World"); - creado en el montón (Heap), puede crear un nuevo objeto incluso si ya existe un literal igual en el pool.
  • Pool de cadenas (String Pool): Área en el montón donde se almacenan los literales de cadenas para optimizar la memoria. Al crear un literal de cadena, la JVM primero verifica el pool. Si la cadena ya existe, devuelve una referencia a ese objeto. Si no, crea uno nuevo y lo añade al pool.
  • Métodos útiles principales:
    • length(): Devuelve la longitud de la cadena.
    • charAt(int index): Devuelve el carácter en la posición especificada.
    • substring(int beginIndex, int endIndex): Devuelve una subcadena.
    • contains(CharSequence s): Verifica si la cadena contiene la secuencia de caracteres especificada.
    • indexOf(int ch) / indexOf(String str): Devuelve la primera posición de la ocurrencia del carácter o subcadena.
    • equals(Object anObject): Compara el contenido de las cadenas. Es importante usar equals() para comparar contenido, no ==, que compara referencias.
    • equalsIgnoreCase(String anotherString): Compara cadenas sin distinguir mayúsculas/minúsculas.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Reemplaza caracteres o subcadenas.
    • trim(): Elimina espacios en blanco al principio y al final.
    • split(String regex): Divide la cadena en subcadenas según el delimitador.

Ejemplo de creación y algunas operaciones:

// Creación con literal
String str1 = "Java";

// Creación con new
String str2 = new String("Java");

// Concatenación
String str3 = str1 + " is amazing";

// Comparación de contenido (usando equals, no ==)
boolean areEqualContent = str1.equals(str2); // true

// Comparación de referencias (usando ==)
boolean areEqualReference = (str1 == str2); // false

// Longitud de la cadena
int length = str3.length();

// Obtener carácter
char firstChar = str1.charAt(0); // 'J'

// Verificación de inclusión
boolean containsIs = str3.contains("is"); // true

La inmutabilidad de String puede llevar a ineficiencias en modificaciones repetidas de cadenas, ya que cada vez se crea un nuevo objeto. Para estos escenarios, es preferible usar StringBuilder o StringBuffer.