10-19-2011, 08:56 AM
(Este mensaje fue modificado por última vez en: 10-19-2011, 09:05 AM por Reboot.)
El problema es que usáis la clase equivocada. Si queréis trabajar con cadenas no tenéis que usar String, sino Stringbuffer.
Cuando añadís o substraéis caracteres a un String, el compilador hace lo siguiente:
String -> [new] Stringbuffer -> [Operaciones] -> [new] String
Porque el objeto String es inmutable, ya que la clase nativa es char y String es un array de chars, mientras que Stringbuffer es un vector.
Cuando haces.
El compilador crea el String "hOla", lo convierte a buffer, lo modifica a HOLA y lo vuelve a convertir a String.
Si tomas la costumbre de usar siempre Stringbuffer te ahorras dos objetos y dos casts.
Y no, no es ninguna inconsistencia. Es llevar la orientación a objetos a sus máximas consecuencias. Es más, diría que fueron consistentes en exceso a la hora de no hacer nativa la clase String.
Cuando añadís o substraéis caracteres a un String, el compilador hace lo siguiente:
String -> [new] Stringbuffer -> [Operaciones] -> [new] String
Porque el objeto String es inmutable, ya que la clase nativa es char y String es un array de chars, mientras que Stringbuffer es un vector.
Cuando haces.
Código:
String hola= "hOla".toUpperCase(); // "HOLA"
El compilador crea el String "hOla", lo convierte a buffer, lo modifica a HOLA y lo vuelve a convertir a String.
Si tomas la costumbre de usar siempre Stringbuffer te ahorras dos objetos y dos casts.
Y no, no es ninguna inconsistencia. Es llevar la orientación a objetos a sus máximas consecuencias. Es más, diría que fueron consistentes en exceso a la hora de no hacer nativa la clase String.
"Es como el que se mataba a pajas con U-jin y hoy en día o es Boku no Piko o ni se le levanta." - AniList