Vc não vai conseguir escapar de copiar atributo por atributo.
Imagine que além de ter 20 atributos, sua classe possui atributos mais complexos.
O método clone padrão faz apenas copias simples e classes mais complexas requerem que vc sobreescreva este método para fazer uma clonagem adequada.
Vc teria que especificar no clone como clonar cada atributo.
Acredito uma possível forma de automatizar o processo seja usando Reflection.
Além disso, no Java, é impossível alterar a identidade de um objeto. Imagine o seguinte exemplo hipotético:
public static void main(String... args) {
Person p1 = new Person();
Person p2 = new Person();
Person temp1 = p1;
Person temp2 = p2;
System.out.println(temp1 == p1); // true
System.out.println(temp2 == p1); // false
System.out.println(temp1 == p2); // false
System.out.println(temp2 == p2); // true
Person.swap(p1, p2);
System.out.println(temp1 == p1); // continua true
System.out.println(temp2 == p2); // continua true
}
Usando o exemplo acima, para obter uma saida diferente da esperada, vc precisaria de uma forma de modificar o conteúdo das variáveis p1 e p2 de dentro do método swap e Java não nos fornece este acesso.
Em C ou C++ esse tipo de coisa é possível com ponteiros para ponteiro, mas em Java não.
Este experimento, vc está se baseando em quê para realizá-lo? Tem algum exemplo de uso de real ou algo assim? Se vc explicar melhor, talvez haja uma saida mais adequada.