Autor Tema: String objeto inmutable  (Leído 10047 veces)

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
String objeto inmutable
« en: 27 de Agosto 2011, 00:14 »
Hola de nuevo, ¿alguien me puede explicar el significado de esta expresión:

"En Java, un String es un objeto inmutable"

Gracias como siempre

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1950
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #1 en: 28 de Agosto 2011, 00:09 »
Esta cuestión puede parecer más sencilla de lo que aparenta. Comencemos por la definición de un String como objeto. En Java, las variables pueden ser dos tipos:

a) Variables que referencian a objetos: la variable no contiene la información, sino referencia al lugar de memoria donde se encuentra la información.
b) Variables que almacenan tipos primitivos (como int, char, boolean, etc.)

Un String o cadena de caracteres en Java tiene un tratamiento de objeto, se asimila a un array de caracteres. No es un tipo primitivo.

Si no tienes muy clara la diferencia entre tipo primitivo y objeto, digamos que el tipo primitivo es algo simple como un número y el objeto algo complejo como un listín de teléfonos. No tomes lo que acabo de decir al pie de la letra porque no es así exactamente, trata solo de servir como ejemplo...

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #2 en: 28 de Agosto 2011, 21:45 »
¿Qué ocurre si el String es una sola letra? Es tipo primitivo o objeto?

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1950
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #3 en: 29 de Agosto 2011, 12:39 »
Un String es siempre un objeto: su contenido puede ser vacío, es decir, "", puede ser una letra como "a", dos letras como "ak" o una cadena con o sin espacios como "perro" o "esta noche hay luna llena". En todos los casos, son objetos.

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #4 en: 30 de Agosto 2011, 00:14 »
Si no me he perdido: un carácter es una letra y es tipo primitivo. Y un String puede ser una letra y no ser tipo primitivo. ¿Cuál es la diferencia? Porque digo yo que una letra siempre es una letra. Si yo digo simplemente: "es una letra" ¿Cómo sé si es tipo primitivo o String?

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #5 en: 18 de Septiembre 2011, 15:47 »
Hola Susana, efectivamente una letra siempre es una letra. Pero míralo de otra manera: imagínate que tú tienes una manzana. Si me entregas esa manzana "suelta" en la mano, yo veo directamente que es una manzana, es algo "simple".

Ahora, si esa manzana la metes dentro de una caja y me entregas la caja, yo no veo qué es lo que lleva dentro. Digamos que es algo "complejo" (un objeto). Entonces la caja puede llevar una letra, y ser simplemente una letra dentro de una caja, pero es distinto si te entrego una caja que si te entrego una manzana. Entre otras cosas, no te resulta igual de fácil ver lo que es ni te requiere el mismo espacio de almacenamiento.

En resumen, una letra es una letra. Si va como tipo primitivo, considera que va "suelta". Si va como objeto, considera que va en una caja. En esencia es lo mismo (una letra), pero presentan diferencias.

kansadostoy

  • Sin experiencia
  • *
  • Mensajes: 26
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #6 en: 19 de Septiembre 2011, 10:38 »
Hola, creo que la diferencia entre objeto y tipo primitivo me queda más o menos clara, pero sigo sin entender qué significa lo de inmutable... Gracias por la ayuda.

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1950
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #7 en: 20 de Septiembre 2011, 11:46 »
Veamos el significado de inmutable, que no es precisamente sencillo de explicar. Consideremos que un objeto ocupa un espacio de memoria. Ahora diremos que hay dos tipos de objetos:

a)   Objetos mutables: son aquellos cuyo espacio de memoria puede ser reemplazado por un contenido definido con posterioridad a la creación del objeto. En este caso, cuando usamos métodos modificadores es el objeto original el que sufre el cambio.

b)   Objetos inmutables: son aquellos cuyo espacio de memoria permanece ocupado con el objeto tal y como se creó inicialmente. ¿Significa esto que no podemos usar métodos modificadores? No, no significa eso. Significa que cuando usamos métodos modificadores en vez de redefinirse el objeto original, la variable apuntadora pasa a apuntar a un nuevo objeto que se crea, permaneciendo el original en su espacio de memoria, podemos decir que en algunos casos “inaccesible”, pero estando. 


En Java, la mayoría de los objetos "esenciales" son inmutables: Long, Integer, Boolean, String, , etc. Un objeto se considera inmutable si su estado no puede cambiarse luego de ser construido. Este comportamiento está ampliamente aceptado como una estrategia robusta para crear código simple y confiable. La inmutabilidad se considera efectiva en aplicaciones concurrentes (hablamos de concurrencia para referirnos a dos tareas que transcurren durante el mismo intervalo de tiempo) donde la mutabilidad (cambiar los objetos su estado), podría dar lugar a que los objetos se corrompieran o llegaran a tener un estado inconsistente.

Nosotros en principio no debemos preocuparnos por el costo de crear nuevos objetos frente a actualizar el mismo objeto. En general usar objetos inmutables es eficiente y solo en casos muy específicos tendríamos que preocuparnos por soluciones que ahorraran la multiplicación de objetos.

Aunque no “nos preocupemos” por ella, sí es deseable que tengamos el concepto de inmutabilidad claro.

kansadostoy

  • Sin experiencia
  • *
  • Mensajes: 26
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #8 en: 01 de Octubre 2011, 13:20 »
A ver si lo entiendo. En un programa java en el que yo modifique decenas de veces un objeto inmutable, se me quedan decenas de objetos por ahí flotando, inaccesibles... y si son inaccesibles para qué los quiero?

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 382
    • Ver Perfil
Re:String objeto inmutable
« Respuesta #9 en: 01 de Octubre 2011, 14:35 »
Yo creo que lo tienes bien entendido: quererlos no los quieres para nada, pero estar están ahí... Es en cierto modo ineficiente pero mejor una pequeña ineficiencia que una inconsistencia o errror.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".