Passagem por valor em Java
Compreenda a passagem por valor em Java: tipos primitivos e referências, reatribuição e mutação, matrizes e armadilhas da imutabilidade.
Passagem por valor em Java é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 3 aulas no total.
Visão geral da passagem por valor
Objetivo: aprender como Java passa parâmetros. Compare tipos primitivos e referências, reatribuição e alteração, matrizes e imutabilidade.
Cópia de tipos primitivos
Tipos primitivos são passados por valor: quem chama o método recebe uma cópia. Reatribuir o parâmetro não altera a variável de quem chamou.
public class Main {
static void inc(int x) {
x = x + 1; // modifies the local copy only
}
public static void main(String[] args) {
int a = 5;
inc(a);
System.out.println("a after inc(a) = " + a); // still 5
}
}
Referências: alterar vs reatribuir
Para objetos, a referência é copiada. Alterar o objeto por meio dela afeta o objeto de quem chamou; reatribuir o parâmetro não o altera.
public class Main {
static class Box { int n; }
static void setTo999(Box b) { b.n = 999; } // mutate via copied reference
static void reassign(Box b) { b = new Box(); b.n = 123; } // reassign local copy only
public static void main(String[] args) {
Box bx = new Box();
bx.n = 10;
setTo999(bx);
System.out.println("after setTo999: bx.n = " + bx.n); // 999
reassign(bx);
System.out.println("after reassign: bx.n = " + bx.n); // still 999
}
}
Matrizes: alterar vs reatribuir
Matrizes são objetos. Altere-as para afetar o objeto de quem chamou; reatribuir o parâmetro não substitui a matriz de quem chamou.
public class Main {
static void fillZero(int[] a) {
for (int i = 0; i < a.length; i = i + 1) a[i] = 0; // mutate caller array
}
static void replace(int[] a) {
a = new int[] {9, 9, 9}; // reassign local copy of the reference
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fillZero(arr);
System.out.println("after fillZero: " + arr[0] + "," + arr[1] + "," + arr[2]); // 0,0,0
replace(arr);
System.out.println("after replace: " + arr[0] + "," + arr[1] + "," + arr[2]); // still 0,0,0
}
}
Imutável vs mutável
String é imutável (retorna novos objetos); StringBuilder é mutável (altera a mesma instância).
public class Main {
static void tryChangeString(String s) {
s = s + "!"; // new String; original unchanged
}
static void changeBuilder(StringBuilder sb) {
sb.append("!"); // mutates same object
}
public static void main(String[] args) {
String s = "hi";
tryChangeString(s);
System.out.println("after tryChangeString: " + s); // "hi"
StringBuilder sb = new StringBuilder("hi");
changeBuilder(sb);
System.out.println("after changeBuilder: " + sb.toString()); // "hi!"
}
}
Trocar corretamente
Como os parâmetros são cópias, trocar tipos primitivos dentro de um método não afeta quem chamou. Retorne os novos valores (ou um objeto contêiner).
public class Main {
static void trySwap(int a, int b) {
int t = a; a = b; b = t; // swaps local copies only
}
static int[] swap(int a, int b) {
return new int[] { b, a }; // return results to the caller
}
public static void main(String[] args) {
int x = 1, y = 2;
trySwap(x, y);
System.out.println("after trySwap: x=" + x + ", y=" + y); // 1,2
int[] res = swap(x, y);
x = res[0]; y = res[1];
System.out.println("after swap: x=" + x + ", y=" + y); // 2,1
}
}
Verificação da passagem por valor
Verificação rápida: Qual afirmação sobre a passagem de parâmetros em Java está correta?
Recapitulação e próxima etapa
Recapitulação: Você viu tipos primitivos e referências, alteração e reatribuição, matrizes como objetos, imutabilidade e um padrão seguro de troca. A seguir: métodos estáticos e de instância.
Perguntas Frequentes
A aula “Passagem por valor em Java” é grátis?
Sim — o texto completo de “Passagem por valor em Java” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 3 aulas no total.
O que vou aprender em “Passagem por valor em Java”?
Compreenda a passagem por valor em Java: tipos primitivos e referências, reatribuição e mutação, matrizes e armadilhas da imutabilidade. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.
Quanto tempo leva a aula “Passagem por valor em Java”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Passagem por valor em Java
- Métodos estáticos e de instância
- Decomposição de métodos e código limpo