Pessoal,
Tenho a seguinte situação, entendi que o valor mostrado de “a”, “b” mas “c” para meu pouco conhecimento deveria ter o mesmo valor de “b”,
Porque a diferença?
class VariavelInstanciaClasse{
int a;
int b;
public void f()
{
a = 0;
b = 0;
int[] c = {0};
g(b,c);
System.out.println(a + " - " + b + " - " + c[0] + " - " );
}
public void g(int b, int[]c)
{
a = 1;
b = 1;
c[0] = 9 ;
}
public static void main(String[] args)
{
VariavelInstanciaClasse obj = new VariavelInstanciaClasse();
obj.f();
}
}
Obrigado.
Qual deve ser a saída na sua opinião??
T+
Olá
Java passa somente por valor todas as suas variáveis, ou seja ele passa uma cópia dos bits das variáveis, se você esta passando um primitivo que é o caso das suas variáveis a e b você estará passando a cópia dos bits que representam determinado valor.
Um Array, mesmo sendo um array de primitivos é considerado um objeto e por isso você passa uma cópia dos bits que representam como você pode acessar determinado objeto na memória, é isso você não passa o objeto e nem mesmo a referencia desse objeto, assim sendo tanto o o metodo que chamou como o metodo chamado terão uma cópias idênticas da referencia do objeto e por isso se referem ao mesmo objeto na memória.
Isso é o que está no livro de certificação da Kathy.
o resultado que Eu esperava era : 1 - 0 - 0
mas o resultado rela foi : 1 -0 - 9
O resultado é esse porque um array em Java é um objeto, então quando você passa um array pra método você está passando uma referência pra esse array.
T+