W3docs

Instrução break em Java

Saia de loops e blocos switch antecipadamente em Java com a instrução break, incluindo o break com rótulo.

break é a saída de emergência. Ele interrompe imediatamente o loop ou bloco switch mais interno em que se encontra, e a execução continua com o que vier a seguir. Use-o quando o trabalho do loop estiver concluído e não houver razão para continuar iterando.

Saindo de um loop

for (int i = 0; i < 100; i++) {
  if (i == 5) {
    break;
  }
  System.out.println(i);
}
// continues here

Imprime 0 1 2 3 4 e encerra. A condição do loop (i < 100) e a atualização (i++) são abandonadas no momento em que break é executado.

Um uso típico: buscar um item e parar assim que o encontrar:

int[] nums = {3, 7, 2, 8, 5};
int target = 8;
int foundAt = -1;

for (int i = 0; i < nums.length; i++) {
  if (nums[i] == target) {
    foundAt = i;
    break;
  }
}
System.out.println("found at index: " + foundAt);

Sem break, você continuaria verificando elementos que já sabe que não são a resposta.

break em um while

Funciona de forma idêntica em while e do/while:

int n = 1;
while (true) {
  if (n > 1000) {
    break;
  }
  n *= 2;
}
System.out.println(n);   // 1024

while (true) { ... break; } é o padrão padrão para "executar o loop até que alguma condição seja decidida dentro do corpo."

break em um switch

Em uma instrução switch tradicional, break sai do switch — evitando o fall-through para o próximo case. Você viu isso no capítulo sobre switch:

switch (cmd) {
  case "start": startServer(); break;
  case "stop":  stopServer();  break;
  default:      help();        break;
}

As expressões switch na forma de seta abordadas em expressões switch não fazem fall-through, portanto não precisam de break.

Aviso

Um switch colocado dentro de um loop é uma armadilha clássica: um break escrito para o loop na verdade sai do switch e deixa o loop continuar rodando. break sempre tem como alvo o loop ou switch mais interno, qualquer que seja o que o envolve mais estreitamente.

for (String cmd : commands) {
  switch (cmd) {
    case "quit":
      break;          // exits the switch, NOT the for loop — the loop keeps going
    default:
      process(cmd);
  }
}

Para sair do loop de dentro do switch, você precisa de um break com rótulo (mostrado abaixo) ou de uma flag que o loop verifique depois.

break sai apenas de um nível

break sai do loop ou switch mais interno que o envolve. Em loops aninhados, ele sai apenas do loop interno:

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    if (j == 1) break;     // only exits the inner loop
    System.out.println(i + "," + j);
  }
}

Saída:

0,0
1,0
2,0

Para sair de todos os loops aninhados de uma vez, use um break com rótulo — abordado em instruções rotuladas:

outer:
for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    if (i == 1 && j == 1) break outer;
    System.out.println(i + "," + j);
  }
}

break vs return

Se o trabalho que vem depois do loop é significativo, use break. Se o método não tem mais nada a fazer assim que o loop termina, basta usar return diretamente:

for (int i = 0; i < nums.length; i++) {
  if (nums[i] == target) {
    return i;       // shorter than break + return after the loop
  }
}
return -1;

Ambos estão corretos. return costuma ser a escolha mais limpa para métodos do tipo busca.

Um exemplo elaborado

java— editable, runs on the server

O que vem a seguir

break sai do loop completamente. Para pular apenas a iteração atual e continuar com a próxima, use continue.

Prática

Prática
Dentro de um loop for aninhado, uma instrução break simples...
Dentro de um loop for aninhado, uma instrução break simples...
Was this page helpful?