Para copiar un objeto en Java no basta on crear uno objeto y asignarle el valor de otro objeto del mismo tipo:
Objeto x = new Objeto();
Objeto y = x;
Ya que esto lo único que harÃa serÃa tener dos variables (x, y) referenciando al mismo objeto con lo que si cambiamos un atributo del objeto x se verá reflejado en el atributo del objeto y ya que, como decimos, es el mismo objeto.
Hay veces que esto se puede solucionar si la clase implementa un constructor que permita recibir como parámetro una instancia de la misma clase. Este constructor deberá tener implementada la copia de todos los atributos del objeto:
public class Objeto {
   ...
   public Objeto(Objeto objeto) {
   }
   ...
}
Objeto x = new Objeto();
Objeto y = new Objeto(x);
Otra opción es que el objeto implemente la interfaz Cloneable. La API de Java proporciona la interfaz Cloneable para poder clonar objetos. Esta interfaz ofrece un solo método:
Object clone(): Devuelve una copia del objeto. El propósito es devolver un objeto que sea distinto del objeto clonador, instancia de la misma clase y que devuelva true en caso de compararlos con el método equals. Estos dos últimos no son un requisito.
public class Objeto implements Cloneable {
   ....
   @Override
   protected Object clone() throws CloneNotSupportedException {
      // Copiar objeto
   }
   ....
}