Argumentos por Valor e por Referencia

1 resposta
marcelotrajano

Em outras linguagens esta claro pra mim esses procedimentos principalmente C++ ou VB que podemos colocar ByRef antes do argumento…agora em java dei uma pesquisada aqui mesmo e entendi que ele faz automaticamente…se voce define como obj (Integer) seria por referencia…se for primitivo(int) por valor…mas não tive exito nos teste…segue codigo…


public static void main(String[] args) {

//int n = 5;
Integer n = new Integer(5);        

System.out.println("Valor antes: "+n);		

dobraValor(n);

System.out.println("Valor depois: "+n);
	
	
	
}
public static void dobraValor(Integer n){
	n=n*2;
	System.out.println("Valor dobrado: "+n);
}

}

Por valor deveria imprimir:
Valor antes: 5
Valor dobrado: 10
Valor depois: 5

Por referencia deveria imprimir:

Valor antes: 5
Valor dobrado: 10
Valor depois: 10

Porem não é o que acontece “por referencia” esta da mesma forma que “por valor”…alguma explicação ou eu estou fazendo algo errado?

Obrigado desde ja…

1 Resposta

T

Em Java todas as referências a objetos são passadas por valor. Se um objeto é imutável (como é o caso de Integer) não há métodos que possam alterar seu valor.

Cuidado - não confunda variáveis e parâmetros (que servem para guardar referências a objetos) com os objetos em si.

O que você teve problemas é com isto aqui:

public static void dobraValor(Integer n){
    n=n*2;
    System.out.println("Valor dobrado: "+n);
}

que é uma abreviação para:

public static void dobraValor(Integer n){
    n = Integer.valueOf (n.intValue() *2); // note que aqui o parâmetro n recebeu um novo objeto obtido com Integer.valueOf
    System.out.println("Valor dobrado: "+n);
    // quando sair deste método, n (que é um parâmetro) vai desaparecer, assim como o objeto que foi criado com Integer.valueOf.
}
Criado 9 de janeiro de 2009
Ultima resposta 9 de jan. de 2009
Respostas 1
Participantes 2