[quote=digaoneves]Bom vamos lá… na prática, passar um tipo primitivo e um objeto é a mesma coisa.
em Java não exista passagem de parâmetro por referência (embora pareça existir), só existe passagem por valor, portanto você envia uma cópia daquilo que você tem, mas o que isso quer dizer na prática?
Vamos fazer uns testes e ver até aonde você pode brincar com isso.[code]public class Teste{
public static void main(String[] args){
int num = 1;
System.out.println("Antes do método = "+num);
alterarNumero(num);
System.out.println("Depois do método = "+num);
}
private static void alterarNumero(int num){
num = 4;
System.out.println("Durante o método = "+num);
}
}[/code] Se rodar esse código vai ver que durante o método, o valor é alterado, porém quando é finalizada sua execução, a variável num ainda aponta para o valor antigo, isso ocorre porque você passou simplesmente uma cópia do valor 1 e a variável num de dentro do método, não é a mesma que existe fora dele.
Agora com objetos é a mesma coisa, você envia uma cópia da referência do objeto, e é importante enfatizar que é uma cópia da referência.
Se 2 variáveis de referência apontam para o mesmo objeto, qualquer alteração feita nos atributos do objeto pode ser visualizada pelas 2 variáveis.
Veja o código a seguir:[code]public class Teste{
public static void main(String[] args){
Pessoa p = new Pessoa();
p.setNome("Rodrigo");
System.out.println("Antes do método = "+p.getNome());
alterarNome(p);
System.out.println("Depois do método = "+p.getNome());
}
private static void alterarNome(Pessoa p){
p.setNome("João");
System.out.println("Durante o método = "+p.getNome());
}
}[/code]Se você executar esse código vai ver que o nome continua diferente após a execução do método, isso ocorre porque as 2 variáveis de referência apontam para o mesmo objeto, mesmo sabendo que o p de dentro do método não é o mesmo que o p de fora, ambos apontam para a mesma coisa, portanto podem alterá-lo a vontade.
E quanto ao fato de ser cópia, por que ele é relevante?
Ele é relevante no caso a seguir:[code]public class Teste{
public static void main(String[] args){
Pessoa p = new Pessoa();
p.setNome("Rodrigo");
System.out.println("Antes do método = "+p.getNome());
alterarNome(p);
System.out.println("Depois do método = "+p.getNome());
}
private static void alterarNome(Pessoa p){
p = new Pessoa();
p.setNome("João");
System.out.println("Durante o método = "+p.getNome());
}
}[/code] Se for atribuído um novo valor à variável, eles não apontam mais para o mesmo objeto, ou seja, você pode alterar os atributos do objeto passado por parâmetro à vontade, e essa alteração será refletida no objeto de fora, agora se em algum momento for atribuído um novo valor à variável de referência dentro do método, esse novo objeto não é mais o mesmo que existe fora do escopo do método.
Espero que tenha ajudado.[/quote]
Cara…que aula !!!
entendi sim!!! muito obrigado !!!
ai fico fácil agora srsrsr
ABS 