dúvida com valores ou referências

3 respostas
J

Pessoal

Estou pesquisando, mas não estou encontrando nada que esclareça minhas dúvidas.

Se tivermos o seguinte código:

Object x = null;
giveMeAString (x);
System.out.println (x);
[...]

void giveMeAString (Object y)
{
    y = "This is a string";
}

A saída seria “This is a string”, ou seja, a referência passada ao método, por parâmetro, foi alterada dentro dele.

Já se considerarmos:

A saída seria"0", ou seja, o valor passado ao método, por parâmetro, não foi alterado dentro dele.

Pelo que entendi, nestes casos, referências são alteradas, mas valores não. Seria isto? Alguém saberia me explicar o motivo disto, pois está bastante confuso pra mim.

Outra dúvida. E se por acaso eu necessitar do comportamento contrário, como posso fazer para passar uma referência por parâmetro, de modo que ela não seja alterada dentro do método? E como passar um valor por parâmetro e fazer com que ele possa ser alterado dentro do método?

Espero ter sido claro.

Grato

Julio Romano

3 Respostas

S

julioromano,

o valor de x não muda pois vc só passa ele como parametro, entao o objeto y recebe o valor contido em x… ou seja nada mais é do que fazer isso:

Object y = x;

mas o codigo nao mexe no valor de x…
que sempre vai ser null…

para vc ver isso… adicione uma linha no codigo e vc vai entender melhor…(eu acho, isso é confuso msm)…

void giveMeAString (Object y)
{
    System.out.println(y);
    y = "This is a string";
}

a saida vai ser exatamente o valor de x, ao inves de null coloque outra coisa pra ver.

P

Funciona assim:
Quando você passa o valor por referencia, na verdade você esta passando o endereço de memoria daquele objeto, (funciona parecido com ponteiro), ou seja, quando vc coloca void giveMeAString (Object y) { y = "This is a string"; }
y estara referenciando o mesmo objeto de x, isso funciona APENAS para variaveis de referencia.
Ja no caso de primitivos ele envia uma ‘copia’ do valor, então se o valor de y for alterado, x não sofrera mudança, pois so uma copia dele foi passada no parametro.
Espero ter ajudado.
Flw

L

A mesma ladainha de sempre, passagem de parâmetros no java é sempre por valor

http://www.javafree.org/javabb/viewtopic.jbb?t=1375

http://www.guj.com.br/posts/list/10106.java

http://www.guj.com.br/posts/list/28736.java

http://www.google.com.br/search?hl=pt-BR&q=passagem+parametros+java&btnG=Pesquisar&meta=

boa leitura
:wink:

Criado 4 de dezembro de 2007
Ultima resposta 5 de dez. de 2007
Respostas 3
Participantes 4