| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2003 21:41:57
|
Scrabby
Entusiasta Java
Membro desde: 05/03/2003 20:25:39
Mensagens: 22
Offline
|
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?
Valeu.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/04/2003 00:39:13
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
No Java, não existe passagem por valor para objetos, só por referências... logo, tudo que tem numa Collection é referência...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/04/2003 01:40:23
|
Daniel Quirino Oliveira
Moderador
![[Avatar]](/images/avatar/846c260d715e5b854ffad5f70a516c88.png)
Membro desde: 23/03/2003 23:57:34
Mensagens: 3299
Localização: Awawawawa (Araraquara) - SP
Offline
|
No Java, não existe passagem por valor para objetos, só por referências... logo, tudo que tem numa Collection é referência... (Carlos Villela)
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{
public static void main(String argv[]){
Object o = new Object();
System.out.println(o); //* saída: java.lang.Object@defa1a
Object outro = o;
System.out.println(outro); //* saída: java.lang.Object@defa1a
//só para testar...
System.out.println(o==outro); //true
System.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). ").
e eis de onde eu tirei estes absurdos:
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/Object.html#equals(java.lang.Object)
.
.
ai ai.. que blablabla chato ...
|
Daniel Quirino Oliveira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/04/2003 02:35:17
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
C*ralho, sono é f*da. Foi mal
Mas, respondendo a pergunta do Scrabby, e aproveitando pra esticar o assunto, então:
Mas...uh...e se eu quiser "copiar" um objeto, pra poder brincar com ele sem interferir nas outras referências?
Implemente Cloneable!
Ah, e veja também Object .clone().
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/04/2003 13:22:20
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
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.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
|
|
|
|