What will be written to the standard output when the following program is executed?
public class Qcb90 {
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] = 1;
}
public static void main(String[] args) {
Qcb90 obj = new Qcb90();
obj.f();
}
}
To até agora sem entender o resultado. Eu jurava que era 001.
ops, tudo no java é passado por valor, nunca por referência… na verdade o array é um objeto, por isso é passado uma CÓPIA da referência onde se encontra o objeto. Assim qualquer alteração através do parâmetro afeta o objeto naquela referência. Entretanto a passagem foi por valor!!!
[quote=“TedLoprao”]ops, tudo no java é passado por valor, nunca por referência… na verdade o array é um objeto, por isso é passado uma CÓPIA da referência onde se encontra o objeto. Assim qualquer alteração através do parâmetro afeta o objeto naquela referência. Entretanto a passagem foi por valor!!!
public void g(int b, int[] c) {
a = 1;
b = 1;
c[0] = 1;
}
O negócio é o seguinte, o “a” que está sendo alterado possui escopo de classe (não sei se é o termo correto, mas tudo bem!!)´, já o “b” é o recebido por parâmetro, ou seja, é uma variável local!! Ali ele não altera o b de escopo de classe e sim o de escopo local…
Espero que tenha sido claro, já que nem sempre eu consigo, huahauhauha