Pregunta:
¿Ayuda Java¿Como se si un objeto es mutable o inmutable?
Danny
2014-10-21 18:48:58 UTC
Hola a todos estoy aprendiendo java , y en el tema de paso de argumentos entre metodos me encontre el tema de los objetos mutables e inmutables.
Hasta ahora tengo claro que si un objeto inmutable se pasa como argumento y se modifica dentro de ese metodo , la modificacion no afecta al objeto original.Y en los objetos mutables si afecta al objeto original.
Tambien tengo entendido que todos los tipos primitivos son inmutables, pero los tipos por referencia pueden ser mutables o inmutables.
Mi pregunta es ¿Cuando un objeto es mutable y cuando inmutable? ¿como los identifico?
y sobre los tipos primitivos, ¿Puede ser un tipo primitivo de alguna forma mutable? o siempre son inmutables
Tres respuestas:
MRKlK
2014-10-22 15:29:59 UTC
tienes que diferenciar entre el valor y variables



todos los tipos primitivos de Java son inmutables



int, char, float, string



una vez creados no pueden cambiar de valor



los unicos tipos mutables son los objetos creados a partir de clases



las variables son mutables, excepto las constantes



PD: no tengo ni idea de java :P
MrAlex6204
2014-10-21 22:21:40 UTC
Yo creo que te refieres a lo que se le conece en el mundo de la programacion orientada objetos como el polimorfismo.

El polimorfismo se refiere cuando un objeto puede cambiar a otro tipo de objeto, y esto solo pasa cuando se hacen herencias.

Ejemplo.Tengo ls sig. clases



class Animal{//Clase base

int NumeroDePatas;

bool EsOvipero;

string Nombre;

bool EsHembra;

}



La clase animal contiene caracteristicas de todos los animales

ahora, su pongamos que vamos hacer un animal nuevo.



//Creamos una herencia de la clase animal, para crear un

//Animal llamado Can

class Can extends Animal{

Perro(string NombredelAnimal,bool EsPerra){

super.NumeroDePatas = 4;

super.Nombre = this.NombredelAnimal;

super.EsHembra = this.EsPerra;

}

}



Ahora vamos a ver como un objeto Can se pude convertit en

un objeto aninmal;

//ceramos dos objetos de Can.

Can MiPerro = new Can("Sparky",false);

Can LaNoviaDeMiPerro = new Can("Fifi",true);



bool Reproducirse(string NombreDelHijo,Animal Hembra,Animal Macho){

//Verificamos que efectivamente se puedan reproducir

if(Hembra.EsHembra == true & Macho.EsHembra ==false){

System.out.println("Ha nacido el primogenito de "+Hembra.Nombre+" y su padre es "+Macho.Nombre+" y el hijo se llamo "+Nombre);

return true;

}



}





Como podras ver en los argumentos de Reproducirse

requiere de dos objetos tipo animal.

sin embargo Can es una herencia de Animal

Entonces podemos hacer lo siguiente.



Reproducirse("Spaky Jr",Miperro,LaNoviaDeMiPerro);



Solo asi se puede ser mutable.

Cualquier argumento que le pases a la funcion Reproducirse que no sea Animal o que no tenga una herencia de esta marca error de compilacion.
El Troll De La Sección
2014-10-22 04:50:48 UTC
Qué sentido tendría responder si la mejor respuesta siempre es para la más larga, aunque se trate de una payasada sin ninguna relación con el tema, como la del tal alex-b..


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...