No codigo abaixo, q chamo o metodo soma passo o valor de x como parametro e uma copia de x é gerada por isso q mando imprimir x pela segunda vez o valor nao e alterado. Agora minha duvida vem aqui, q chamo o metodo componente passo um JButton e um JPanel como parametro, ou seja, tambem uma copia de cada variavel e criada já q a passagem e por valor(pelo q eu sei), sendo assim q o metodo add for chamado passando panel como argumento não era para anexar nada a JFrame já que o botao foi adcionado a uma cópia do JPanel§ e nao ao JPanel original(panel). Mas nao e o q acontece, o botao e adcionado ao panel original e esse ao JFrame.
Pq isso está acontecendo? Essa é uma duvida crue q estou martelando.
Em Java todos os parâmetros são passados por valor. Assim, quando se passa um tipo primitivo, é feita uma cópia do seu valor de tal forma que a variável passada permaneça inalterada. Bom, isso é passagem por valor.
Você nunca passa um objeto como valor. Você passa uma variável de referência. Passar uma variável de referência significa fazer o parâmetro referenciar a mesma coisa que a variável de referência referencia. Ou seja, quando você faz isso:
conjunto.add(pessoa);
se pessoa for null, o valor null será passado para o método. Senão, o parâmetro referenciará ao mesmo objeto referenciado por pessoa. Note que não é criada uma cópia do objeto. Note também que o método pode alterar o objeto referenciado, simulando uma passagem por referência.
fel_augusto
"cu_ringa":
No codigo abaixo, q chamo o metodo soma passo o valor de x como parametro e uma copia de x é gerada por isso q mando imprimir x pela segunda vez o valor nao e alterado. Agora minha duvida vem aqui, q chamo o metodo componente passo um JButton e um JPanel como parametro, ou seja, tambem uma copia de cada variavel e criada já q a passagem e por valor(pelo q eu sei), sendo assim q o metodo add for chamado passando panel como argumento não era para anexar nada a JFrame já que o botao foi adcionado a uma cópia do JPanel(p) e nao ao JPanel original(panel). Mas nao e o q acontece, o botao e adcionado ao panel original e esse ao JFrame.
Pq isso está acontecendo? Essa é uma duvida crue q estou martelando.
karinha...... ñ sei ñ mas acho q no seu código os "x" estão se confundindo. Pq vc ñ tenta colocar o parâmetro do método "soma" como "int y" e dentro do método vc coloca "y=x; x=x+x;" e ve se da certo. Se ñ der vc me responde. blz. falou karinha ........ fui
cu_ringa
valeu vamorim.
q dizer q objeto sempre e passado por referencia.
vamorim
Ná prática, é como se fosse.
TedLoprao
Só é importante lembrar que se vc der um new dentro do método e alterar a referência, o objeto de fora não sofrerá nenhuma alteração, veja o ex.: