都可以用于结束循环你知道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是直接结束了当前方法。将这个栈帧给弹出去了。

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

相关推荐
LCG元2 小时前
【面试问题】JIT 是什么?和 JVM 什么关系?
面试·职场和发展
向前看-2 小时前
验证码机制
前端·后端
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹3 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭3 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫4 小时前
泛型(2)
java
超爱吃士力架4 小时前
邀请逻辑
java·linux·后端
南宫生4 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石4 小时前
12/21java基础
java
李小白664 小时前
Spring MVC(上)
java·spring·mvc