0Pricing
Java Academy · Aula

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

  1. Passagem por valor em Java
  2. Métodos estáticos e de instância
  3. Decomposição de métodos e código limpo
← Voltar para Java Academy