break
不带标签时的代码
public class Test2 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
break;
}
System.out.print(j);
}
System.out.println("内循环结束了");
}
System.out.println("外循环结束了");
}
}
运行结果
01内循环结束了
01内循环结束了
01内循环结束了
01内循环结束了
01内循环结束了
外循环结束了
带标签时代码
public class Test2 {
public static void main(String[] args) {
a:for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
break a;
}
System.out.print(j);
}
System.out.println("内循环结束了");
}
System.out.println("外循环结束了");
}
}
运行结果
01外循环结束了
分析:不带标签时,执行循环,在外层和内层循环都第一次循环时,j=2时,break执行,每次触发break执行条件都是结束内层循环,继续执行外层循环,直到外层循环结束,停止循环。
当带标签时,执行循环,在外层和内层都是第一次循环时,j=2执行,break执行,此时读取标签,跳到标签所指向的外层循环的结尾,开始执行语句,打印输出标签标记的循环体以后的语句。
continue
不带标签时的代码
public class Test2 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
continue ;
}
System.out.print(j);
}
System.out.println("内循环结束了");
}
System.out.println("外循环结束了");
}
}
运行结果
0134内循环结束了
0134内循环结束了
0134内循环结束了
0134内循环结束了
0134内循环结束了
外循环结束了
带标签时代码
public class Test2 {
public static void main(String[] args) {
a:for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
continue a;
}
System.out.print(j);
}
System.out.println("内循环结束了");
}
System.out.println("外循环结束了");
}
}
运行结果
0101010101外循环结束了
分析:不带标签时,执行循环,在外层和内层循环都第一次循环时,j=2时,continue执行,每次触发continue执行条件都是结束本次循环,继续执行下次循环,直到循环结束,停止循环。所以只是每次执行循环时没有打印输出j=2时的值。
当带标签时,执行循环,在外层和内层都是第一次循环时,j=2执行,continue执行,此时读取标签,跳到标签所指向的外层循环的开头,开始执行循环语句,每次触发都是跳转到标签指向循环体语句的起始位置,直到外层循环结束。