Strings en Profundidad
String en Java es un objeto especial e inmutable: una vez creado, no se puede modificar. Cuando haces "Hola" + " Mundo", Java crea tres objetos String: "Hola", " Mundo", y "Hola Mundo". En un loop que concatena strings 1000 veces, creas 1000 objetos intermedios innecesarios.
Por eso existe StringBuilder: es un buffer mutable que acumula texto y solo crea el String final cuando llamas toString(). Úsalo siempre que construyas strings dinámicamente en loops.
La comparación de Strings es un error clásico de Java: nunca uses == para comparar strings. El operador == compara referencias de memoria (si son el mismo objeto), no el contenido. "abc" == "abc" puede ser true o false dependiendo de cómo se crearon los Strings. Siempre usa .equals() para comparar el contenido.
La clase String tiene docenas de métodos útiles: substring para extraer partes, split para dividir por separador, trim para eliminar espacios, replace para sustituir, y más.
String s = "Hola, Mundo Java";
// Métodos básicos
System.out.println(s.length()); // 16
System.out.println(s.toUpperCase()); // HOLA, MUNDO JAVA
System.out.println(s.toLowerCase()); // hola, mundo java
System.out.println(s.trim()); // sin espacios
System.out.println(s.contains("Java")); // true
System.out.println(s.startsWith("Hola")); // true
System.out.println(s.indexOf("Mundo")); // 6
System.out.println(s.substring(6)); // Mundo Java
System.out.println(s.substring(6, 11)); // Mundo
System.out.println(s.replace("Java", "Kotlin"));
// String.format (equivalente a printf)
String msg = String.format("Precio: $%.2f", 9.99);
String fecha = String.format("%d/%02d/%04d", 5, 3, 2024);
// split y join
String csv = "Ana,Bob,Carlos,Diana";
String[] nombres = csv.split(",");
String unido = String.join(" - ", nombres);
// chars y comparación
char primera = s.charAt(0); // 'H'
byte[] bytes = s.getBytes();
bool igual = "abc".equals("abc"); // true
bool ignorar = "abc".equalsIgnoreCase("ABC"); // true
// StringBuilder para concatenaciones
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("item").append(i).append(",");
}
String resultado = sb.toString();
// String.valueOf y conversiones
String numStr = String.valueOf(42); // "42"
String boolStr = String.valueOf(true); // "true"
int num = Integer.parseInt("100"); // 100
double d = Double.parseDouble("3.14"); // 3.14
Practica esta lección
Resuelve los ejercicios del curso de Java en la app, gratis y con corrección automática.
Empezar a practicar