| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/06/2006 21:47:01
|
rodolfodev
JavaBaby
![[Avatar]](/images/avatar/87019fb492fe6f03c3bdb29cf2ffb6eb.jpeg)
Membro desde: 29/03/2006 16:09:17
Mensagens: 92
Offline
|
Bom, para o tópico ter mais emoção vou dividi-lo em duas partes.
Tenho dois exercicios que tirei do livro da kathy, vou coloca-los hoje para vcs pensarem e amanhã atarde coloco a minha duvida e a resposta.
Exercicio 1
Exercicio 2
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/06/2006 22:40:18
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
O q ta virando isso aqui... É só o q tava faltando... Tópico à prestações...
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/06/2006 22:56:04
|
rodolfodev
JavaBaby
![[Avatar]](/images/avatar/87019fb492fe6f03c3bdb29cf2ffb6eb.jpeg)
Membro desde: 29/03/2006 16:09:17
Mensagens: 92
Offline
|
Atendendo a pedidos acho q isso parece meio palhaçada.
Então minha duvida é.
Para mim os dois exercicios deveriam ter comportamento iguais, mais no exercicio 1 todos os arrays tem a mesma referencia de a1 e o resultado é 15 e 15. Já no exercicio 2 os boolean tem a mesma referência mais a respota não é igual b1 é diferente de b2, [resposta false true].
Queria saber se alguem consegue me explicar oq acontece.
Valeu e desculpa pela enrolação é q o resultado eu já sei mais o porque ainda estou me convencendo. rs
Grato,
Rodolfo
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/06/2006 07:57:14
|
diego2005
GUJ Master
![[Avatar]](/images/avatar/7fd4db88d31ab524e0afe153c4f9465a.jpeg)
Membro desde: 17/08/2005 10:11:05
Mensagens: 1095
Offline
|
As variáveis do primeiro exercício são arrays, por isso todos tem a mesma referência, ou seja, o mesmo conteúdo, ele "apontam" endereço na memória (Java is not C++). Já no segunda exercício, as outras variáveis tem apenas uma cópia do valor de b1, e não a mesma referência.
Não sei se fui claro, e nem correto, mas se alguém puder te explicar melhor....
Falow.....T+
|
SCJP 1.4
Meu Currículo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/06/2006 09:34:02
|
Luiz_Gustavo
Virtual Machine Man
![[Avatar]](/images/avatar/012d9fe15b2493f21902cd55603382ec.png)
Membro desde: 30/04/2005 12:55:11
Mensagens: 518
Localização: Assis
Offline
|
Em java, a passagem de parâmetros é por valor, independentemente se o que é passado para um método é um objeto ou um tipo primitivo.
Quando você passa um tipo primitivo para um método, você está na verdade passando uma cópia do seu valor:
o resultado apresentado será true, pois o método muda(boolean bIn) opera sobre uma cópia do valor passado, e não no valor do atributo passado como parâmetro, ou seja, o valor de bOut não é afetado pela mudança em bIn.
Quando você passa um objeto a um método acontece o mesmo. Você está passando na verdade uma cópia do endereço deste objeto na memória.
como um array é um objeto, quando você passao o array ao método, é passado o endereço do mesmo. Lá dentro do método, a operação ocorre exatamente no objeto array que possui aquele endereço (que nesse ponto possui duas variáveis que apontam para o mesmo endereço, objOut e objIn, logo para o mesmo objeto).
Quando duas variáveis de instância possuem o mesmo endereço, ou seja, apontam para o mesmo objeto, qualquer uma delas pode alterar um valor do objeto. Veja bem, um valor do objeto, não o próprio objeto. O que isso quer dizer?
quer dizer que se no método muda(long[] objIn) a operação fosse essa:
você não teria o objeto objOut alterado para um novo objeto, e sua saída seria 6, pois neste caso o que está sendo feito é atribuir um novo objeto à variável de instância objIn, mas não à variável de instância objOut.
sacou?
ahhh... para exemplificar, me veio a seguinte comparação à mente:
Imagine que você tenha (não me pergunte o por quê) duas pessoas soltando a mesma pipa, ou seja, duas linhas amarradas à mesma pipa.
Se qualquer uma dessas pessoas puxar a pipa para um lado e para o outro, a outra pessoa vai perceber, e vice-versa. Esse seria o caso da mudança no valor, que é percebido pelas duas instâncias.
Agora, se uma das duas, de saco cheio de dividir a mesma pipa, resolve cortar a sua linha e amarrar em outra pipa, a outra pessoa continua com a pipa na linha... enquanto a outra tem sua própria pipa... sacou?
bom, espero ter ajudado a esclarecer!
[]s
|
Analista e Desenvolvedor de Sistemas
http://luizgustavoss.blogspot.com/
http://luizgustavoss.wordpress.com/
http://www.linkedin.com/in/luizgustavoss
Procurando uma especialização em Java, SOA e Android? Conheça a TNT Educacional
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/06/2006 10:26:22
|
rodolfodev
JavaBaby
![[Avatar]](/images/avatar/87019fb492fe6f03c3bdb29cf2ffb6eb.jpeg)
Membro desde: 29/03/2006 16:09:17
Mensagens: 92
Offline
|
no exercicio 2 na linha
boolean b2 = fix(b1);
o b1 é uma copia não uma referência do b1 por isso que b1 continua false?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/06/2006 10:35:15
|
Luiz_Gustavo
Virtual Machine Man
![[Avatar]](/images/avatar/012d9fe15b2493f21902cd55603382ec.png)
Membro desde: 30/04/2005 12:55:11
Mensagens: 518
Localização: Assis
Offline
|
rodolfodev wrote:no exercicio 2 na linha
boolean b2 = fix(b1);
o b1 é uma copia não uma referência do b1 por isso que b1 continua false?
na verdade o que vai "para dentro" do método é que é uma cópia...
então o método trabalha com uma cópia do valor de b1, e te retorna o resultado para b2...
[]'s
|
Analista e Desenvolvedor de Sistemas
http://luizgustavoss.blogspot.com/
http://luizgustavoss.wordpress.com/
http://www.linkedin.com/in/luizgustavoss
Procurando uma especialização em Java, SOA e Android? Conheça a TNT Educacional
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/06/2006 10:41:14
|
rodolfodev
JavaBaby
![[Avatar]](/images/avatar/87019fb492fe6f03c3bdb29cf2ffb6eb.jpeg)
Membro desde: 29/03/2006 16:09:17
Mensagens: 92
Offline
|
Beleza entendi. Vou procurar mais uns exercicios desses, porque apesar de parecer simples esse tipo de exercicio confunde.
Grato,
|
|
|
 |
|
|