Qcb90

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.

101

Oi, a tem escopo de classe e não de metodo, por isso o valor mostrado pelo danieldestro é impresso. :wink:

valeuz…

A passagem de um parâmetro do tipo array (no caso C) em java é sempre por referência? Pq se for por valor o resultado teoricamente seria 100.

Bobagem… Arrays são objetos, logo, sempre são passados por referência.

Valeu.

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!!!

Fallow

[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!!!

Fallow[/quote]

Boa!

o C tudo bem… eu não entendi pq o A teve o valor alterado e o B não…

Vc quer dizer nessa parte:

    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

Perfeito Ted!E não devemos esqueçer q todas as variáveis passadas em java são cópias! :wink:
Um bom artigo:
http://www.yoda.arachsys.com/java/passing.html

Boa!!