W3docs

Java if, else e else if

Controle o fluxo do programa em Java com if, else if e else, e aprenda a aninhar condições de forma limpa.

Um programa que sempre executa a mesma sequência de instruções não é muito útil. if é como Java faz uma pergunta e escolhe o que fazer a seguir. Junto com else if e else, forma a espinha dorsal de cada decisão que o seu código fará.

O if básico

if (condition) {
  // runs only when condition is true
}

A condição deve ser uma expressão boolean — sem valores truthy/falsy como em JavaScript ou Python. if (1) não compila; if (count > 0) sim.

int age = 20;

if (age >= 18) {
  System.out.println("You can vote.");
}

Adicionando um else

else fornece o ramo alternativo — o que é executado quando a condição é false:

int age = 16;

if (age >= 18) {
  System.out.println("You can vote.");
} else {
  System.out.println("Too young to vote.");
}

Exatamente um dos dois ramos é executado. Não há fall-through.

Encadeando com else if

Para mais de dois resultados, encadeie else if. Java verifica cada condição de cima para baixo e executa o primeiro ramo cuja condição seja verdadeira; os demais são ignorados:

int score = 72;

if (score >= 90) {
  System.out.println("A");
} else if (score >= 80) {
  System.out.println("B");
} else if (score >= 70) {
  System.out.println("C");
} else {
  System.out.println("F");
}

A ordem importa. Se você colocar a condição mais abrangente primeiro, ela absorverá todos os casos seguintes. O exemplo acima imprime C porque score >= 70 é a primeira correspondência — mesmo que score >= 60 também fosse verdadeiro se fosse verificado.

Chaves são opcionais — mas use-as

Java permite omitir as chaves quando um ramo é uma única instrução:

if (loggedIn)
  showDashboard();
else
  showLogin();

Não faça isso. Sempre use chaves. As duas linhas abaixo parecem iguais, mas se comportam de forma diferente:

if (loggedIn)
  showDashboard();
  logActivity();        // ALWAYS runs — not part of the if!

if (loggedIn) {
  showDashboard();
  logActivity();        // both inside the if
}

O custo de {} são dois caracteres; o custo do bug é o seu fim de semana.

Expressões boolean dentro do if

A condição pode ser qualquer coisa que avalie para boolean:

if (x > 0 && x < 100) { ... }
if (name.equals("admin")) { ... }
if (!list.isEmpty()) { ... }
if (user != null && user.isActive()) { ... }

Observe que if é uma instrução, não uma expressão: ele realiza uma ação, mas não produz um valor por si só, portanto você não pode escrever int x = if (...). Para a versão que produz um valor, utilize o Operador Ternário.

Esse último padrão — verificação de null primeiro, depois uma chamada de método — usa avaliação de curto-circuito. Se user for null, user.isActive() nunca é invocado. Consulte Operadores Lógicos para &&, || e !, e Operadores de Comparação para >, == e similares.

Aninhando instruções if

Você pode colocar um if dentro de outro if. Às vezes é a forma mais clara de expressar uma condição:

if (user != null) {
  if (user.isAdmin()) {
    System.out.println("Welcome, admin.");
  } else {
    System.out.println("Welcome, user.");
  }
} else {
  System.out.println("Please log in.");
}

Mas aninhamentos profundos são difíceis de ler. Retornos antecipados geralmente limpam isso:

if (user == null) {
  System.out.println("Please log in.");
  return;
}
if (user.isAdmin()) {
  System.out.println("Welcome, admin.");
  return;
}
System.out.println("Welcome, user.");

Menos indentação, mais fácil de seguir.

Erro comum: = em vez de ==

Iniciantes vindos de outras linguagens às vezes escrevem:

if (x = 5) { ... }   // compile error

= é atribuição, == é comparação. Ao contrário do C, Java rejeita isso em tempo de compilação, a não ser que a variável seja um boolean — porque o resultado de int x = 5 é um int, não um boolean. É uma pequena vantagem que o sistema de tipos do Java oferece gratuitamente.

Um exemplo prático

A cadeia else if abaixo converte pontuações numéricas em notas por letra. Execute-a e confirme a saída:

java— editable, runs on the server

O resultado impresso é:

95 -> A
82 -> B
71 -> C
68 -> D
45 -> F

Quando usar switch em vez disso

Uma longa cadeia else if que testa uma variável contra uma lista de valores fixos geralmente fica mais clara como uma instrução switch. Use if/else if quando os ramos testam expressões diferentes ou usam intervalos (como o exemplo de notas acima); use switch quando compara um único valor a várias constantes.

O que vem a seguir

Para atribuições condicionais em uma linha, o Operador Ternário geralmente é mais legível do que um if/else completo.

Prática

Prática
O que é impresso por este código quando score é 85?
O que é impresso por este código quando score é 85?
Was this page helpful?