都可以用于结束循环你知道break,continue,return之间的区别吗?

在 Java 中,breakcontinuereturn 是三个不同的关键字,它们在程序中的作用和使用场景有着不同的目的。为了区分它们之间的异同,我们就来根据它们的各自的使用场景来分析它们之间的异同吧。

break

首先我们都知道编程语言都是使用英文来进行编程的(当然也有易语言使用英文编程),所以作为一个关键字的前,它还是一个英文单词。所以我们先来看看它的单词含义:

我们可以看到:

  1. 打破
  2. 终止
  3. 中断

所以我们可以知道,它是一个「终止」操作。可以用来终止循环,终止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的值是存在了一个变化过程:

  1. 首先num初始化赋值为0。
  2. 接着val==10符合条件,num赋值为10。
  3. 接着进入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出去了。

总结

  1. break、continue、return都可以结束循环。不过存在差异。
  2. break是中断循环,是包含了之后的循环。而continue则是符合条件的循环,后面的循环还会进行判断运行。
  3. break中断的是当前的循环体,即最近的循环体。在方法返回类型为void时,单层循环中break和return的作用是一样的。但是存在多重循环体则作用不一样,return是直接结束了当前方法。将这个栈帧给弹出去了。

本文偏向基础,不过越基础的东西我们就要更牢牢的掌握。莫以"知"小而不为~

相关推荐
季明洵1 分钟前
动态规划及背包问题
java·数据结构·算法·动态规划·背包问题
祭曦念8 分钟前
学Rust3次都放弃?这篇文章帮你避开90%的新手劝退
后端
蒸汽求职9 分钟前
【蒸汽教育求职干货】OPT只剩3个月还没找到工作,怎么办?——留学生IT求职的“紧急预案”
人工智能·经验分享·面试·职场和发展·美国求职
蒸汽求职12 分钟前
【蒸汽教育求职分享】美国IT面试的Behavioral Question:STAR法则人人都知道,但90%的人用错了
人工智能·面试·职场和发展·github·求职招聘·留学生求职
侠客行031715 分钟前
Tomcat 从陌生到熟悉
java·tomcat·源码阅读
iPadiPhone22 分钟前
万亿级流量的基石:Kafka 核心原理、大厂面试题解析与实战
分布式·后端·面试·kafka
愤豆22 分钟前
06-Java语言核心-JVM原理-JVM内存区域详解
java·开发语言·jvm
snakeshe101042 分钟前
Java 泛型深度解析:从手工封装到类型擦除与通配符
后端
神奇小汤圆43 分钟前
深夜告警炸裂?这份Linux故障排查“作战地图”请收好
后端