10-19-2011, 09:28 AM
(Este mensaje fue modificado por última vez en: 10-19-2011, 09:40 AM por Yumichan.)
(10-19-2011, 08:56 AM)Reboot escribió: El problema es que usáis la clase equivocada. Si queréis trabajar con cadenas no tenéis que usar String, sino Stringbuffer.Es lo que trato de explicar desde hace 1 página, pero no leeis...
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.


(10-19-2011, 08:56 AM)Reboot escribió: Cuando haces.Era una forma de demostrale a EmuAGR, que un literal de cadena es un objeto de la clase String y como tal puedes usar sus métodos sobre él. Puedes poner cualquier otro ejemplo.
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.
EmuAGR escribió:He ahí una inconsistencia de Java. String es un objeto, debería declararse como tal usando el constructor adecuadamente y no como un tipo simple.Por poder se puede continuar viendo cosas raras ad infinitum (a Java y a todos los lenguajes), pero IMHO obligar a hacer new con literales de cadena:
a ) Sería una chapuza obligar a hacerlo siempre, new String (String) "copia" contenido. Lo tienes en un sitio y es inmutable, pa' qué mas (salvo los casos concretos para aligerar el GC).
b ) Es lo mismo de antes, es por estar pensando que un literal es un tipo simple como los char* de C. ¡El propio literal es un objeto!, ¡el compilador lo ve como un objeto!, sólo hay que pensar en él como tal.
c ) Java permite que todas las clases que mapean tipos simples (Char, Integer, Double, etc) admiten instanciación desde sus tipos de datos simples. De pensar que b ) es una inconsistencia del lenguaje, c ) viene a uniformizarlo.
No trabajo con .NET, sólo he leido cosas de pasada, a ver si alguien sabe concretar este punto, pero creo que salvo el punto c ) estos lenguajes se comportan como Java porque supone una ventaja evidente.
Pero podemos hablar de ponis y que Frikitty haga flame

![[Imagen: IUmqKJR.png]](https://i.imgur.com/IUmqKJR.png)