Não, é por valor... Veja bem, se fosse por
referência, quando é chamado o new do array ele deveria alterar o de fora
também, pois se é uma referência, ele está mexendo diretamente na posição de
memória do objeto... No início eu tbm achava q era por referência, tanto é que
estava defendo isso tbm... Mas com o exemplo do Leonardo fica bem claro que é
por valor, além do mais, se vc pesquisar no site da sun (java.sun.com), nos
tutoriais, se não me engano, lá encontrará uma seção dizendo que no java toda
passagem é por valor...
Pelo que entendi através do exemplo do Leonardo, o
valor passado é a posição na memória do objeto e por isso altera o de fora tbm.
Mas se alteramos esta posição com o new, nada é replicado para fora e isso não
deveria acontecer se fosse passagem por referência...
A minha idéia do funcionamento é mais ou menos a
seguinte:
public class
Class1
{
String s1;
public Class1()
{
this.s1 = "Valor 1"; //o valor inicial é
Valor 1
}
public void alteraObjeto(Class1 c1)
{
c1.s1 = "Valor 2";
}
}
public class Class2
{
public static void main(String [] args)
{
Class1 c1 = new Class1();
Class1 c2 = new Class1();
System.out.println(c1.s1);
c2.alteraObjeto(c1);
System.out.println(c1.s1);
}
}
Quando crio a váriavel c1, ela se encontra, por exemplo na posição 1 da
memória, e essa variável aponta para a posição 100 que é onde se encontra o
objeto. Quando passo c1 para o método a posição de c1 dentro do método será 2 e
não mais 1, entretanto a posição dois tbm apontara para 100, logo qquer
alteração feita no método será vista por fora pois as duas variáveis apontam
para o mesmo objeto. Entretanto, ao executar o new a posição que c1 (dentro do
método) aponta deixará de ser 100. Se fosse por referência, a posição dos dois
c1 seria a mesma e ao executar o new mudaria dentro e fora.
Não sei se é assim que funciona internamente, mas foi o
que eu abstrai do exemplo... Veja que na chamada existem as duas variáveis nos
registros de ativação, elas apenas apontam para o mesmo local...
Espero ter sido claro no exemplo e espero ter ajudado.
Rodrigo
|
- [java-list] Duvida comparacao de trio de ... Delmiro Fernandes
- Re: [java-list] Pergunta for Dummies Paulo Roberto Paro
- Re: [java-list] Pergunta for Dummies Daniel V. Gomes
- Re: [java-list] Pergunta for Dummies Daniel V. Gomes
- Re: [java-list] Pergunta for Dummies Binary Evolution
- Re: [java-list] Pergunta for Dummies Alan
- Re: [java-list] Pergunta for Dummies leonardo bruno
- Re: [java-list] Pergunta for Dummies rodklein
- Re: [java-list] Pergunta for Dummies leonardo bruno
- Re: [java-list] Pergunta for Dummies Alan
- Re: [java-list] Pergunta for Dummies Rodrigo
- Re: [java-list] Pergunta for Dummies Volnei
- Re: [java-list] Pergunta for Dummies Bruno Borges
- RE: [java-list] Pergunta for Dummies Eder Ribeiro Ferreira
- RE: [java-list] Pergunta for Dummies José Fernandes Godoy Jr
- Re: [java-list] Pergunta for Dummies leonardo bruno