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 hereImprime 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); // 1024while (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.
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,0Para 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
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.