Foro de elhacker.net

Programación => Java => Mensaje iniciado por: xaps en 28 Febrero 2014, 11:46 am



Título: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: xaps en 28 Febrero 2014, 11:46 am
Buenas, estoy aprendiendo java y me he propuesto crear un TicTacToe como ejercicio de entrenamiento.
He desarrollado dos clases, la clase Jugador y la clase Tablero. El esquema que tengo pensado es crear una instancia de Tablero y posteriormente pasar un puntero a cada Jugador para que puedan operar directamente con el, pero no se como hacer esto.
Les pongo un ejemplo:
Código
  1. public class Tablero
  2. {
  3. ...
  4. }
  5.  
  6. public class Jugador
  7. {
  8.  private Tablero tablero;
  9.  Jugador(Tablero tablero)
  10.  {
  11.    this.tablero = tablero;
  12.  }
  13. }

Entonces, si hiciera:
Código
  1. Tablero tab = new Tablero();
  2. Jugador jug = new Jugador(tab);

El objeto jug contendrá una copia de tab, o un puntero a tab?


Título: Re: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: egyware en 28 Febrero 2014, 13:13 pm
El objeto jug contendrá una copia de tab, o un puntero a tab?


Tendrá una referencia al objeto creado, así que no te preocupes. En ningún momento tendrás una copia del tablero.


Título: Re: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: xaps en 28 Febrero 2014, 13:47 pm
Gracias, pero estoy algo confundido. En Java como diferencio cuando se crea una copia y cuando se hace una referencia?


Título: Re: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: egyware en 28 Febrero 2014, 14:01 pm
En Java todas las clases, interfaces, enums y arreglos se pasan por referencia. Lo único que se pasa por valor (copia) son las variables primitivas como int, double, char, etc... (String no es variable primitiva)

Espero que te haya quedado claro.

Saludos!


Título: Re: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: xaps en 28 Febrero 2014, 14:25 pm
En Java todas las clases, interfaces, enums y arreglos se pasan por referencia. Lo único que se pasa por valor (copia) son las variables primitivas como int, double, char, etc... (String no es variable primitiva)

Espero que te haya quedado claro.

Saludos!
Me ha quedado claro, muchas gracias! :)

En caso de que quisiera crear una copia de un objeto, la manera sería con una constructora-copiadora, cierto?


Título: Re: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: egyware en 28 Febrero 2014, 14:48 pm
En caso de que quisiera crear una copia de un objeto, la manera sería con una constructora-copiadora, cierto?

Así es, aunque no todas las clases tienen un constructor copia. También puedes averiguar el uso de clone que sirve para clonar un objeto pero, requiere más estudio para entender bien su uso.

Saludos!


Título: Re: ¿Como pasar un objeto a una constructora sin crear una copia?
Publicado por: xaps en 28 Febrero 2014, 15:01 pm
Muchas gracias por la ayuda!