Además de lo que ya se dijo, Cuerda literales [es decir, cadenas como "abcd"
pero no como new String("abcd")
] en Java son internados - esto significa que cada vez que se refieren a "ABCD", se obtiene una referencia a una instancia única de String
, en lugar de una nueva cada vez. Por lo que tendrá:
String a = "abcd";
String b = "abcd";
a == b; //True
pero si tuviera
String a = new String("abcd");
String b = new String("abcd");
entonces es posible tener
a == b; // False
(y en caso de que alguien necesita recordar, siempre use .equals()
para comparar cadenas; ==
pruebas de igualdad física).
Los literales de Interning String son buenos porque a menudo se usan más de una vez. Por ejemplo, considere el (artificial) Código:
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
Si no tuviéramos la internación de cadenas "siguiente iteración" tendría que ser instanciado 10 veces, mientras que ahora sólo se crea una instancia de una vez.
También debería echar un vistazo a esta pregunta http://stackoverflow.com/questions/456575/java-wrapper- igualdad-prueba – changed
Porque los literales de cadena ya son objetos. – EJP
Tenga en cuenta que 'new String (...)' se ha utilizado para eludir un detalle de implementación cuando se subcadena cadenas grandes. Esto fue arreglado en Java 7 y ya no es necesario. –