/* Cuando se invoca un método se copian los valores de 
  los argumentos en los parámetros. Ninguna actuación del 
  método sobre el parámetro puede modificar el valor original 
  de una variable que se pasa como argumento. Pero en el 
  caso de pasar una referencia a un objeto, es posible 
  modificar el objeto en sí, aunque la referencia original 
  de la variable pasada como argumento no se pueda modificar.     
  */
 

public class AlumnoRef {
  String nombre = null, apellidos = null, grupo = "INF-1";
  int añoDeNacimiento, númeroPersonal;
  char horario ='M';

  public static void main (String[] args) {
    /* Si asignamos a una variable otra cuyo  
	 valor es primitivo, dicho valor se copia 
	 en la primera variable. */
	 double x = 1, y;
	 y = x;
	 System.out.println("x = " + x + "; y = " + y); 
    x = x+1;
	 System.out.println("x = " + x + "; y = " + y + '\n'); 
	
	 /* si asignamos a una variable otra cuyo 
	 valor es un objeto (es una referencia al 
	 objeto), obtenemos dos referencias al mismo
	 objeto. */ 	 
	 System.out.println(" ");
	 AlumnoRef alumno1 = new AlumnoRef (); 
	 AlumnoRef alumno2 = alumno1;
	 alumno1.imprime();
	 alumno2.ponGrupo("MEC-1", 'T');
	 System.out.println(" ");
	 alumno1.imprime();	 
  }		 
		 
  String dameGrupo() {
    return grupo;
  }	 
	 	 	  
  void ponGrupo(String nuevoGrupo, char nuevoHorario) {
    grupo = nuevoGrupo;
	 horario = nuevoHorario;
  }

  void imprime() {
    System.out.println("Nombre: " + nombre);
    System.out.println("Apellidos: " + apellidos);
    System.out.println("Año de nacimiento: " + añoDeNacimiento);
    System.out.println("Número personal: " + númeroPersonal);
	 System.out.println("Grupo: " + dameGrupo());
    System.out.println("Horario: " + horario);
  }

} 