大家是否見過這種for迴圈,在for迴圈前加了個標記的: outerLoop: for (; ; ) { for (; ; ) { break outerLoop; } } 我之前有一次在公司業務代碼中見過有這種寫法的,沒在意,今天在看JDK線程池的代碼時,又看到ThreadPoolExecutor ...
大家是否見過這種for迴圈,在for迴圈前加了個標記的:
outerLoop:
for (; ; ) {
for (; ; ) {
break outerLoop;
}
}
我之前有一次在公司業務代碼中見過有這種寫法的,沒在意,今天在看JDK線程池的代碼時,又看到ThreadPoolExecutor
的addWorker
方法中有這種寫法。於是就查了相關資料,也比較簡單。
總結下它的用法吧:
- 上面代碼中的
outerLoop
是一個標記外層for
迴圈的標簽,它可以隨便命名。 - 該標簽主要用於for迴圈嵌套的情況,結合
break
和continue
跳轉到外層for迴圈;
我們知道,break
的作用是跳出當前迴圈,continue
的作用是結束本次迴圈,繼續下次迴圈。如果有雙層for迴圈,在內層的for迴圈中,想直接跳出所有迴圈,使用break outerLoop
就可以實現;而continue outerLoop
的作用是結束外層的本次迴圈,繼續外層的下一次迴圈。
舉個例子:
public static void main(String[] args) {
String[] strings = {"1", "2", "3"};
outerLoop:
for (String str : strings) {
for (; ; ) {
if (str.equals("1")) {
break;
}
if (str.equals("2")) {
continue outerLoop;
}
if (str.equals("3")) {
break outerLoop;
}
}
System.out.println("str.equals(1)");
}
System.out.println("str.equals(3)");
}
上面代碼中雙重for迴圈,執行邏輯為:
- 第一個
if
跳出當前內層迴圈,會列印str.equals(1)
; - 第二個
if
執行外層for迴圈的下一次迴圈; - 最後一次迴圈,
str
的值為3,跳出外層迴圈,結束整個迴圈,然後列印str.equals(3)
。
這種for加標簽的寫法確實很少見,學Java的時候都沒學這個東西,實際寫業務代碼的時候能避免就避免,內層迴圈能抽就抽個方法。如果業務太複雜抽不了,這種寫法也不失為一種策略。
本文來自博客園,作者:xfcoding,歡迎轉載:https://www.cnblogs.com/cloudrich/p/17389613.html