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 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只能在循环体中使用,不在循环体中使用都会报这个错误。