Alguem poderia me informar para que serve o metodo clone do ArrayList e de outros objetos que possuem o mesmo metodo[/code]
ArrayList
3 Respostas
Veja o javadoc de clone() em java.lang.Object.
Basicamente, clone serve para fazer cópias (clones) de objetos. Só que isso não é automático; a classe é quem deve implementar esse método clone, porque ela deve saber o que copiar. Por isso é que nem todas as classes definem o método clone. Só algumas.
Por exemplo, arrays definem esse método clone.
Olhando o código abaixo você pode entender qual a diferença entre clonar um objeto e simplesmente copiá-lo.
import java.util.*;
...
String[] s = {"val1", "val2", "val3"};
String[] t = s.clone(); // recebendo um clone
String[] u = s; // copiando a referência
System.out.println (Arrays.asList(s)); // imprime [val1, val2, val3]
t[0] = "outra coisa";
System.out.println (Arrays.asList(s)); // imprime [val1, val2, val3]
System.out.println (Arrays.asList(t)); // imprime [outra coisa, val2, val3]
u[0] = "ainda outra coisa";
System.out.println (Arrays.asList(s)); // imprime [ainda outra coisa, val2, val3]
System.out.println (Arrays.asList(t)); // imprime [outra coisa, val2, val3]
System.out.println (Arrays.asList(u)); // imprime [ainda outra coisa, val2, val3]
Quando você usa o método clone, você faz uma cópia dos valores e não da referência. quando você usa:
a = b;
você está copiando a referência de b para a.
resumindo:
String[] s = {"val1", "val2", "val3"};
String[] t = s.clone(); // recebendo um clone
String[] u = s; // copiando a referência
s == t ? false
s == u ? true
t == u ? false
s.equals(t) ? true
s.equals(u) ? true
t.equals(u) ? true
bejeto, aproveitando o assunto de refencia de objetos notei na sua assinatura que conhece hibernate, e estou tendo serios problemas em refencia de objetos com o banco de dados principalmente qndo tento carregar um objeto duas vezes ou deleta-lo, voce pode me explicar como funciona a refencia dos objetos com hibernate estou super confuso, eu uso com xdoclet!!