Atributo de método

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+