Ver Mensaje Individual
  #8 (permalink)  
Antiguo 30/12/2011, 11:39
Avatar de FiruzzZ
FiruzzZ
 
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 11 meses
Puntos: 41
Respuesta: Re: Pasar Objeto Como Valor...

Cita:
Iniciado por nomemolestes Ver Mensaje
En java todos los objetos se pasan por valor
Equivocado, es por referencia (todo lo demás que escribiste está bien). Esto es muy fácil de demostrar, es cuestión de escribir 20 lineas de código.

Cita:
Iniciado por nomemolestes Ver Mensaje
Si lo que se quiere es no poder cambiar las propiedades del objeto que se usa para llamar al método, entonces si, se debe utilizar el método clone.
Para esto existe la palabra final, no todos los objetos soporta clone(), y no todos tiene el efecto esperado.




Por si queda alguna duda y "no tiene tiempo de escribir 20 lineas", acá está la prueba definitiva.




Código Java:
Ver original
  1. public class ValorOReferencia {
  2.  
  3.     private String valor;
  4.     private int primitivo;
  5.  
  6.     public ValorOReferencia(String valor, int primitivo) {
  7.         this.valor = valor;
  8.         this.primitivo = primitivo;
  9.     }
  10.  
  11.     public void setPrimitivo(int primitivo) {
  12.         this.primitivo = primitivo;
  13.     }
  14.  
  15.     public void setValor(String valor) {
  16.         this.valor = valor;
  17.     }
  18.  
  19.     @Override
  20.     public String toString() {
  21.         return "ValorOReferencia{" + "valor=" + valor + ", primitivo=" + primitivo + '}';
  22.     }
  23.  
  24.     public static void main(String[] args) {
  25.         ValorOReferencia obj = new ValorOReferencia("xxx", 777);
  26.                 ValorOReferencia referenceToObj;
  27.         referenceToObj = obj;
  28.         referenceToObj.setPrimitivo(888);
  29.         System.out.println("orig:"+obj.toString());
  30.         System.out.println("copy:"+referenceToObj.toString());
  31.         ValorOReferencia obj2 = duplicarContenido(obj);
  32.         System.out.println("orig:"+obj.toString());
  33.         System.out.println("copy:"+referenceToObj.toString());
  34.         System.out.println("new :"+obj2.toString());        
  35.     }
  36.  
  37.     private static ValorOReferencia duplicarContenido(ValorOReferencia referencia) {
  38.          
  39.         referencia.setValor("xxxxxx");
  40.         referencia.setPrimitivo(1);
  41.          //la siguiente linea PIERDE efecto sobre el objecto CUANDO FINALIZA el método
  42.          referencia = new ValorOReferencia("NEW?", 1234);
  43. System.out.println("valorTemporal: "+referencia.toString());
  44.  
  45.           return referencia;
  46.     }
  47. }
__________________
BadProgrammerException!

Última edición por FiruzzZ; 30/12/2011 a las 11:52