java迴圈控制中break、continue、return的比較
阿新 • • 發佈:2019-01-22
一、break
在Java 中,break語句有3種作用。-
第一,在switch語句中,它被用來終止一個語句序列。
-
第二,它能被用來強制退出一個迴圈體,在多個迴圈巢狀中,break只退出當前所在的一層迴圈體。
if(1<2){break;}
for(;;){ //第二層迴圈
if(2<3){break;}
for(;;){ //第三層迴圈
if(3<4){break;}
}
}
}
-
第三,它能作為一種“先進”goto 語句來使用,帶標籤的break。
- 標籤格式為“label:”,比如帶“:”;
- 被加標籤程式碼塊必須包圍break 語句;
- 被加標籤的程式碼塊可以是任何程式碼塊(保證有break語句即可),即break不止可以退出迴圈;
first: {
second: {
third: {
System.out.println("Before the break.");
if(t) break second; // break out of second block
System.out.println("This won't execute"
}
System.out.println("This won't execute");
}
System.out.println("This is after second block.");
} 執行該程式,產生如下輸出: Before the break. This is after second block.
二、continue
- continue——作用是忽略continue後面剩餘迴圈體語句,然後繼續執行本層迴圈的條件表示式,執行下一次迴圈;
- 帶標籤continue——continue也有標籤功能,類似break的功能,即 “continue + 標籤 = break”;
for(int i=0; i<10; i++) {
System.out.print(i + " ");
if (i%2 == 0)
continue;
System.out.println("");
}
//帶標籤的continue
outer:
for (int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(j > i) {
System.out.println();
continue outer; //返回到標籤處,退出
// break;
}
System.out.print(" " + (i * j));
}
} 帶標籤的輸出結果: 0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81 驗證“continue + 標籤 = break”,把語句中“continue outer; ”註釋掉,換成“break”,輸出結果如下: 0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81 即等式成立!即continue標籤的作用是找到迴圈體入口,繼續下一次迴圈!
三、return
- return明確地從一個方法返回,即返回到呼叫該方法入口。
{
App ap = new App();
ap.breakTest();
}
public void breakTest(){
//不帶標籤的continue
for(int i=0; i<10; i++) {
System.out.print(i + " ");
if (i%2 == 0)
continue;
System.out.println("");
}
//帶標籤的continue
outer:
for (int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(j > i) {
System.out.println();
continue outer; //返回到標籤處,退出
}
System.out.print(" " + (i * j));
}
}
} 輸出結果: 0 1
2 3
4 5
6 7
8 9
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
測試2,更換continue outer; 為return:
public
static void main( String[] args ){
App ap = new App();
ap.breakTest();
}
public void breakTest(){
//不帶標籤的continue
for(int i=0; i<10; i++) {
System.out.print(i + " ");
if (i%2 == 0)
continue;
System.out.println("");
}
//帶標籤的continue
outer:
for (int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(j > i) {
System.out.println();
// continue outer; //返回到標籤處,退出
return;
}
System.out.print(" " + (i * j));
}
}
}
測試結果:
0 12 3
4 5
6 7
8 9
0 測試3,更換第一個for迴圈中的continue為return: public static void main( String[] args )
{
App ap = new App();
ap.breakTest();
}
public void breakTest(){
//不帶標籤的continue
for(int i=0; i<10; i++) {
System.out.print(i + " ");
if (i%2 == 0)
// continue;
return;
System.out.println("");
}
//帶標籤的continue
outer:
for (int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(j > i) {
System.out.println();
// continue outer; //返回到標籤處,退出
return;
}
System.out.print(" " + (i * j));
}
}
} 測試結果: 0
當遇到第一個return時,沒有再繼續往下執行,直接返回到了方法入口!