Referencia ou copia?

Pessoal,

é verdade que em java somente é possivel passar parametros por copia?? se eu quiser passar a referência nao tem como?

Até mais!

vc diz q não dá para passar coisas como pointers de C?
pq na verdade o que são passados são referências para objetos… por exemplo se vc fizer um método assim:

public void fazAlgo (Collection c) {
    c.add(new String ("Coisa nova"));
}

A String “coisa nova” vai estar na coleção para o método que chamou o método fazAlgo… entendeu? confundi ainda mais?

Tipo, o objeto que você passa é somente uma cópia do anterior(onde as alterações na cópia não alteram o original), ou tem como passar o próprio objeto?

ele altera sim… pq vc passa uma cópia da referência para o objeto…

Quando eu digo copia, quero dizer que quando você tem um metodo
metodo(Objeto x) e um Objeto y, e vc faz metodo(y), então x seria o próprio y?

Olá pessoal,

Segue abaixo um trecho de código q exemplifica exatamente o que estamos discutindo:

public class MyTeste {

    public MyTeste() {
    }

    public static void main(String[] args) {
        
        MyTeste myTeste = new MyTeste();
        
        ArrayList list = new ArrayList();
        list.add("teste");
        int i_val = 0;
        
        System.out.println("ANTES ---> i_ref = " + list);
        System.out.println("ANTES ---> i_val = " + i_val);

        myTeste.testValue(i_val);
        myTeste.testReference(list);

        System.out.println("DEPOIS ---> i_ref = " + list);
        System.out.println("DEPOIS ---> i_val = " + i_val);
    }
    
    private void testValue(int i){
        i = 10;
    }
    
    private void testReference(ArrayList list){
        list.add("teste2");
    }
    
}

e agora a saída deste simples aplicativo:

ANTES ---> i_ref = [teste]
ANTES ---> i_val = 0
DEPOIS ---> i_ref = [teste, teste2]
DEPOIS ---> i_val = 0

Como podem verificar quando passamos Objetos, ele passa a referencia (o endereço do objeto) e consegue alterar normalmente, porém quando utilizamos tipos primitivos, isso não é possível, pois é possível apenas a passagem por valor.

Espero que possa ser util.

Abraços…

Isto vai ajudar:

http://www.guj.com.br/posts/list/24894.java
http://www.guj.com.br/posts/list/19299.java

Respondendo diretamente a pergunta: não é possível apssar por referência, só por cópia de referência.

eu li(no Deitel) que os tipos de dados primitivos sao passados por copia(parametro) e os objetos(como array, String, etc.) sao passados por referencia!!!

Leia um dos topicos linkados.

Vlw pessoal!!! ajudaram bastante, obrigado! :smiley: