Olha a minha duvida, por exemplo em vi esses dias em Delphi que em uma Classe TList é armazenado os ponteiros dos objetos instanciados, certo?
pois é, em java é adicionado o que dentro de um container?(ArrayList por exemplo), o objeto ou um handle pra ele?
tipo, se eu tiver um outro handle pro mesmo objeto, um no container e o outro fora, o de fora poderia modificar o que esta dentro do container?
No Java, não existe passagem por valor para objetos, só por referências… logo, tudo que tem numa Collection é referência…
Daniel_Quirino_Olive
acho que não é bem assim, Carlos. Em java, tudo é passado por valor, desde tipos primitivos até objetos. O que acontece com os objetos, é que o que é copiado é o endereço de memória do objeto (alguns consideram isso passagem por referência, mas pra mim é passagem por valor). Olha só (desculpa a identação):
public class testeObj{
publicstaticvoidmain(Stringargv[]){Objecto=newObject();System.out.println(o);//* saída: java.lang.Object@defa1aObjectoutro=o;System.out.println(outro);//* saída: java.lang.Object@defa1a//só para testar…System.out.println(o==outro);//trueSystem.out.println(o.equals(outro));//true}}
Mais simples, só “hello world”. Mas, quando fazemos “outro = o;”, o que é copiado é o valor de “o”, que é uma referência (lembre-se de que em Java, todo Objeto é um “ponteiro”). Logo, o que vai ser copiado é o valor da referência do objeto (ou seja, o endereço de memória) . Assim, se vc fizer “o==outro” ou “o.equals(outro)” vai ser “true” (diz a documentação: "The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true). ").
eh, essas denominacoes academicas sao dificeis neh?
java passa 100% por valor. entao, quando ele passa uma referencia, ele passa o valor de referencia (que eh um endereco). da esse efeito ai.
sobre Cloneable, o pessoal nem recomenda mais usar. em especial porque a interface eh soh uma “mixin”, e nao define metodo nenhum. melhor usar copy constructors, apesar de mais lentos.