Pessoal,
é verdade que em java somente é possivel passar parametros por copia?? se eu quiser passar a referência nao tem como?
Até mais!
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! 