Em Java, é importante entender como as variáveis são passadas para métodos. A linguagem usa dois conceitos principais: passagem por valor e passagem por referência. Neste artigo, vamos explicar a diferença entre esses dois comportamentos e como isso afeta o seu código.
Passagem por Valor
Quando falamos de passagem por valor, isso significa que o valor da variável é copiado para o parâmetro do método. Ou seja, a variável original não é alterada se o valor do parâmetro for modificado dentro do método. Isso acontece com tipos primitivos em Java, como int
, float
, boolean
, etc.
Exemplo de Passagem por Valor
public class PassagemPorValor {
public static void main(String[] args) {
int x = 10;
System.out.println("Antes: " + x);
modificarValor(x);
System.out.println("Depois: " + x);
}
public static void modificarValor(int a) {
a = 20;
}
}
Saída:
Antes: 10
Depois: 10
Neste exemplo, a variável x
é passada para o método modificarValor()
. Porém, dentro do método, a variável a
recebe um valor diferente, mas isso não afeta a variável x
original, já que x
foi passado por valor.
Passagem por Referência
Por outro lado, a passagem por referência ocorre quando, em vez de passar uma cópia do valor, passamos uma referência para o objeto. Isso significa que, se o objeto referenciado for modificado dentro do método, a alteração será refletida na variável original, já que ambos (a variável original e a do método) apontam para o mesmo objeto na memória.
Em Java, a passagem por referência ocorre com objetos (tipos não primitivos, como String
, ArrayList
, etc.).
Exemplo de Passagem por Referência
import java.util.ArrayList;
public class PassagemPorReferencia {
public static void main(String[] args) {
ArrayList<Integer> lista = new ArrayList<>();
lista.add(10);
System.out.println("Antes: " + lista);
modificarLista(lista);
System.out.println("Depois: " + lista);
}
public static void modificarLista(ArrayList<Integer> list) {
list.add(20);
}
}
Saída:
Antes: [10]
Depois: [10, 20]
Neste exemplo, a variável lista
é passada para o método modificarLista()
. Como lista
é um objeto, o método tem acesso à mesma instância de ArrayList
e pode modificar seu conteúdo. Por isso, o valor da lista original foi alterado.
Resumo
Passagem por valor: Em Java, tipos primitivos são passados por valor. Isso significa que qualquer modificação feita no parâmetro dentro do método não afeta a variável original.
Passagem por referência: Objetos (como arrays e instâncias de classes) são passados por referência. Isso significa que se o objeto for modificado dentro do método, a mudança será refletida fora do método também.
A diferença entre esses dois tipos de passagem pode ter um grande impacto no comportamento do seu código, especialmente quando se trata de manipulação de dados complexos ou grandes volumes de informações.
Top comments (0)