Alguem pode me explicar porque o resultado é true ?? Eu ja fiz varias vezes no papel e para mim a resposta é false sem duvidas!!! para mim w1 ira apontar para o segundo objeto criado e w3 apontado para o primeiro objeto criado.
Alguem entende pra me explicar? Ja fiz na ide e realmente deu true!
Está certo, é true mesmo. O go() apenas te ilude trocando os dois valores, pois o que retorna é o wr3, que ainda possui o valor de w.
CarlosEduardoDantas
a resposta pro seu problema é o seguinte… em java, os parametros são passados por valor, não por referência… ou seja… esse método go(Wrench,Wrench) passou o endereço de memória das variáveis locais w,w2 correto?só que passou uma cópia desses endereços, entao wr1 está apontando para o mesmo endereço de memória que w e wr2 está apontando para o mesmo endereço de memória que w2.
quando vc faz wr1 = wr2; e wr2 = wr3; está modificando o endereço no qual as variáveis locais wr1 e wr2 referenciarão, porém nada acontece com w e w2 já que são outras variáveis.
Resultado… tu retorna um wr3 que na verdade está apontando para o mesmo endereço de memória que w e que wr1 antes de receber wr2 e esse wr3 é atribuído a w2 que no final das contas aponta pro mesmo lugar que w.
JimMorrison
java so passa por valor tipos primitivos e String, outros objetos são por referencia…
o retorno do metodo go eh a referencia recebida no seu primeiro parametro…
se na linha quatro eu to dizendo q w2 = go(w, w2)
na linha 8 w3 = w (pois a referencia de w foi o q passei na variavel de metodo wr1)
na linha 9 eu retorno w3
entao w2 == wr3 e wr3 == w
pois o metodo go nao faz nada alem de retornar wr1 !
CarlosEduardoDantas
JimMorrison:
java so passa por valor tipos primitivos e String, outros objetos são por referencia…
o retorno do metodo go eh a referencia recebida no seu primeiro parametro…
se na linha quatro eu to dizendo q w2 = go(w, w2)
na linha 8 w3 = w (pois a referencia de w foi o q passei na variavel de metodo wr1)
na linha 9 eu retorno w3
entao w2 == wr3 e wr3 == w
pois o metodo go nao faz nada alem de retornar wr1 !
na verdade, esse conceito de passar objetos por referência é um pouco “discutível”, pois os parâmetros de go(Wrench,Wrench) estão apontando para o mesmo endereço de memória que w e w2, porém são variáveis distintas, ou seja… foi copiado para wr1 o endereço que w está apontando e foi copiado para wr2 o endereço que w2 está apontando. Se wr1 modifica algum valor do seu objeto, também modificará em w, porém se wr1 referenciar outro objeto ou null, nada acontecerá com w porque são 2 variáveis distintas…
concluindo que, apesar de as duas referenciarem o mesmo cara, wr1 não é w e wr2 não é w2, apenas o conteúdo que está em w foi COPIADO para wr1 e o conteudo de w2 foi copiado para wr2…