1.首先了解break和continue的使用范围和作用
1.1使用范围
break适用范围:只能用于switch或者是循环语句中。当然可以用于增强for循环。
continue适用范围: 用于循环语句中。
1.2作用
break:
1. break用于switch语句的作用是结束一个switch语句。
2. break用于循环语句中的作用是结束当前所在的循环语句。
continue:
1.中止当前迭代的循环,进入下一次的迭代
1.3区别:
break是结束循环,进行循环的下一条语句
continue是结束本次循环,进行下一次循环。
2.forEach中不能使用break和continue的原因
首先查询forEach的源码可以知道,接受的参数是Consumer对象,这是一个函数式接口.然后在forEach方法中再做了增强for循环.
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
所以forEach的本质其实就是一个方法,这个方法里面进行了增强for循环,这个for循环执行的是我们实现的Consumer函数式接口的accept方法.
在forEach中使用break时提示的Break outside of loop(循环外使用break),前面说过forEach是一个方法,我们传到forEach中的是一个Consumer对象,然后forEach源码里面再调用Consumer的accept方法,那么这里就相当于我们在accept方法中使用了break,这样子当然会报错了,break只能在循环体中使用,不在循环体中使用都会报这个错误。