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.
import javax.swing.*;
import java.awt.*;
public class Escopo extends JFrame{
int x = 3;
JButton b1;
public Escopo(){
b1 = new JButton("carlos");;
JPanel panel = new JPanel();
componente(b1, panel);
System.out.println(x);
soma(x);
System.out.println(x);
getContentPane().setLayout(new FlowLayout());
add(panel);
setSize(250, 250);
setVisible(true);
}
public void componente(JComponent b, JComponent p){
p.add(b);
}
public void soma(int x){
x = x + x;
}
public static void main(String args[]){
new Escopo();
}
}
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.
[quote=“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§ 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.
[code]
import javax.swing.;
import java.awt.;
public class Escopo extends JFrame{
int x = 3;
JButton b1;
public Escopo(){
b1 = new JButton("carlos");;
JPanel panel = new JPanel();
componente(b1, panel);
System.out.println(x);
soma(x);
System.out.println(x);
getContentPane().setLayout(new FlowLayout());
add(panel);
setSize(250, 250);
setVisible(true);
}
public void componente(JComponent b, JComponent p){
p.add(b);
}
public void soma(int x){
x = x + x;
}
public static void main(String args[]){
new Escopo();
}
}
[/code][/quote]
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
valeu vamorim.
q dizer q objeto sempre e passado por referencia.
Ná prática, é como se fosse. 
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.:
// método qualquer
Pessoa p = new Pessoa();
p.setNome("TedLoprao");
trocaNome(p);
System.out.println(p.getNome());
public void trocaNome(Pessoa p) {
p = new Pessoa();
p.setNome("Rodrigo");
}
O nome impresso ainda será TedLoprao…
Fallow