在 Java 中,break
、continue
和 return
是三个不同的关键字,它们在程序中的作用和使用场景有着不同的目的。为了区分它们之间的异同,我们就来根据它们的各自的使用场景来分析它们之间的异同吧。
break
首先我们都知道编程语言都是使用英文来进行编程的(当然也有易语言使用英文编程),所以作为一个关键字的前,它还是一个英文单词。所以我们先来看看它的单词含义:
我们可以看到:
- 打破
- 终止
- 中断
所以我们可以知道,它是一个「终止」操作。可以用来终止循环,终止switch语句。
java
for(int i=0;i<100;++i){
if(i==5){
break;
}
System.out.println(i);
}
执行以上代码,输出
txt
0
1
2
3
4
当i=5时,满足条件进入if语句,执行break。中断了这个循环操作。
java
public static void main(String[] args) {
int val = 10;
int num = 0;
switch (val) {
case (5):
num = 5;
case (10):
num = 10;
case (20):
num = 20;
default:
num = 100;
}
System.out.println(num);
}
以上会输出什么?给你3秒钟回答,1,2,3。 答案是
txt
100
是不是和你想的不一样,为什么不是10?其实num的值是存在了一个变化过程:
- 首先num初始化赋值为0。
- 接着val==10符合条件,num赋值为10。
- 接着进入default条件,num赋值为100.
是不是代码自己设计的和自己想的不一样。本来想的用if表达是下面这样
java
public static void main(String[] args) {
int val = 10;
int num = 0;
if (val == 5) {
num = 5;
} else if (val == 10) {
num = 10;
} else if (val == 20) {
num = 20;
} else {
num = 100;
}
}
那么问题出在哪呢?其实就出在了每个case操作最后少了一个break
,switch和以上不一样的是如果没有break进行中断那么只要每个case条件为true就都会进入。而不是第一个符合了就不会继续后面的case条件比较了。
java
public static void main(String[] args) {
int val = 10;
int num = 0;
switch (val) {
case (5):
num = 5;
break;
case (10):
num = 10;
break;
case (20):
num = 20;
break;
default:
num = 100;
}
System.out.println(num);
}
输出
txt
10
switch用的相对于if还是比较少的,所以大家一定要记得使用break。要不然一时半会意识不到这个情况,不要问我为什么知道。。。
continue
continue含义为:继续。那么是继续什么呢?continue也是用于循环中的,也是"结束"循环,不过结束的是当前此次循环。而break是结束之后的所有循环。
java
for(int i=0;i<10;++i){
if(i%2==0){
continue;
}
System.out.println(i);
}
输出
txt
1
3
5
7
9
根据代码和英文含义来说:是结束当前这次符合条件的循环(后面的循环体中的代码不会再执行,条件为:i为偶数),而继续后面的循环。用于跳过循环体中余下的代码,直接进入下一次循环的迭代。
如果以上代码换成break,那么就只会输出1就结束了。这就是它和break之间的区别了。
return
return的含义其实很好理解就是:返回。
是Java中用于返回方法的返回值所用的关键字。当方法为void时,return可以被省略。否则不能被省略,也不能通过编译。这是return的主要用法。
不过在一些情况下return和break之间的作用是一样的。
java
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
if (i == 5) {
return;
}
System.out.println(i);
}
}
java
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
if (i == 5) {
break;
}
System.out.println(i);
}
}
两者的输出都为
txt
0
1
2
3
4
那么它们之间的区别是什么呢,除了上面描述return的职能之外。最大的区别就是break
是只能结束于当前循环体。
java
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
for (int j=0;j<3;++j){
if(j==2){
return;
}
System.out.print(i+":"+j+"\t");
}
System.out.println();
}
}
输出
txt
0:0 0:1
1:0 1:1
2:0 2:1
3:0 3:1
4:0 4:1
5:0 5:1
6:0 6:1
7:0 7:1
8:0 8:1
9:0 9:1
每次循环只要内存循环j==2时,就结束内存循环中断了当前循环体,接着循环外层。而return则不一样
java
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
for (int j=0;j<3;++j){
if(j==2){
return;
}
System.out.print(i+":"+j+"\t");
}
System.out.println();
}
}
输出
txt
0:0 0:1
return是直接结束了整个方法,在jvm虚拟机中直接把这个栈帧给pop出去了。
总结
- break、continue、return都可以结束循环。不过存在差异。
- break是中断循环,是包含了之后的循环。而continue则是符合条件的循环,后面的循环还会进行判断运行。
- break中断的是当前的循环体,即最近的循环体。在方法返回类型为void时,单层循环中break和return的作用是一样的。但是存在多重循环体则作用不一样,return是直接结束了当前方法。将这个栈帧给弹出去了。
本文偏向基础,不过越基础的东西我们就要更牢牢的掌握。莫以"知"小而不为~