Además de lo que ya se dijo, los literales de cadena [es decir, cadenas como "abcd"
pero no como new String("abcd")
] en Java están internados; esto significa que cada vez que te refieres a "abcd", obtienes una referencia a un soloString
instancia, en lugar de una nueva. cada vez. Entonces tendrás:
String a = "abcd";
String b = "abcd";
a == b; //True
pero si tuvieras
String a = new String("abcd");
String b = new String("abcd");
entonces es posible tener
a == b; // False
(y en caso de que alguien necesite recordárselo, utilice siempre .equals()
para comparar cadenas; ==
pruebas de igualdad física).
Interning String literales es bueno porque a menudo se usan más de una vez. Por ejemplo, considere el código (artificial):
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
Si no tuviéramos internados de Strings, "Next iteration" necesitaría ser instanciado 10 veces, mientras que ahora solo será instanciado una vez.