先来小段Demo,自己跑一下就能看到效果了:
public static void main(String[] args) {
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>();
List<String> listC = new ArrayList<String>();
listA.add("1");
listA.add("2");
listA.add("3");
listB.add("一");
listB.add("二");
listB.add("三");
listC.add("one");
listC.add("two");
listC.add("three");
// 第一种方式:循环前面加标识,break相应的标识
System.out.println("第一种方式:循环前面加标识,break相应的标识");
A: for (int i = 0; i < listA.size(); i++) {
System.out.println("A列表:" + listA.get(i));
if (listA.get(i).equals("2")) {
break A;
}
B: for (int j = 0; j < listB.size(); j++) {
System.out.println("B列表:" + listB.get(j));
if (listB.get(j).equals("二")) {
break B;
}
C: for (int k = 0; k < listC.size(); k++) {
System.out.println("C列表:" + listC.get(k));
if (listC.get(k).equals("two")) {
break C;
}
}
}
}
// 第二种方式:声明变量,在循环中改变变量值
System.out.println("第二种方式:声明变量,在循环中改变变量值");
boolean flagA = true;
for (int i = 0; i < listA.size() && flagA; i++) {
System.out.println("A列表:" + listA.get(i));
if (listA.get(i).equals("2")) {
flagA = false;
}
boolean flagB = true;
for (int j = 0; j < listB.size() && flagB; j++) {
System.out.println("B列表:" + listB.get(j));
if (listB.get(j).equals("二")) {
flagB = false;
}
boolean flagC = true;
for (int k = 0; k < listC.size() && flagC; k++) {
System.out.println("C列表:" + listC.get(k));
if (listC.get(k).equals("two")) {
flagC = false;
}
}
}
}
}
控制台输出效果如下:
第一种方式:循环前面加标识,break相应的标识
A列表:1
B列表:一
C列表:one
C列表:two
B列表:二
A列表:2
第二种方式:声明变量,在循环中改变变量值
A列表:1
B列表:一
C列表:one
C列表:two
B列表:二
C列表:one
C列表:two
A列表:2
B列表:一
C列表:one
C列表:two
B列表:二
C列表:one
C列表:two
从上面的效果中可以看出来两种方式都可以跳出你想要跳出的循环。
不同点在于:
第一种方式:在执行break+标识后直接跳出标识的循环;
第二种方式:在下次循环开始前才会跳出你想要跳出的循环。
用的时候可以根据自己的业务做选择,当然两种循环式可以达到相同的效果的,有兴趣的小伙伴可以自己试一下。