首页 > 编程语言 >【SWITCH】java中的switch,一直没发现的错误

【SWITCH】java中的switch,一直没发现的错误

时间:2023-04-27 12:23:10浏览次数:38  
标签:case java SWITCH System break switch println out

关于 switch-case 的的使用误区

先看一段代码

Integer bb = 1;
switch (bb){
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
    default:
        System.out.println(3);
}

会打印什么呢?
只打印 1, 还是会打印 123 呢?

答案是:123


我之前,一直会觉得它匹配完了,就过去了,比如说这里,bb 是1,它匹配到1,ok, 没问题,但是到了 case 2 的时候,它不是不匹配了吗,为什么它还是进去了呢?default,不是说只有没有任何一个项不匹配才进default 吗?上面不是明明有匹配到了,它干嘛还进去了? —— (暴露功底虚的事实)

嗯,
看这个结果
其实它是这样子的, switch-case 它从每一个匹配到的项,就开始往下执行,如果没有break 掉,它就会一直一直往下走,之后的每一个 case 无论是否能够匹配,它都会走,直到它遇到一个 beak, 而无论这个break 在接下来的哪个位置,都会退出。
比如下这样:

Integer bb = 1;
switch (bb){
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
        break;
    default:
        System.out.println(3);
}

因为从case1 就命中了,就进入case1 的逻辑,但是因为 case1 的片断没有 break, 所以它会往下继续执行,并且不需要再判断,只要不break,就往下走,于是它就继续打印了2,然而在case2片断,它里面有了一个 break,于是它就跳出去了,就不用再往下执行。于是这个结果是打印 12.





emmmmm。。。。
真的是非常后知后觉啊。
(只能说,好在之前每个 case 都带了 break, 才没至于产生生产事故。。。。害。。)

标签:case,java,SWITCH,System,break,switch,println,out
From: https://www.cnblogs.com/aaacarrot/p/17358568.html

相关文章

  • 软件测试选择学习java还是python?
     你好,我是小牛。当你学完软件测试基本理论,掌握业务测试流程,功能测试可以搞定,数据库和linux玩的也很溜时,接下来想进一步进阶,那么学习一门编程语言必不可少。同时,学习一门编程语言也是你成为自动化测试工程师乃至测试开发工程师的基本准入门槛。目前,编程语言五花八门,比如很多人大学......
  • JavaScript把数字转为汉字数字的function
    functionnumberToChinese(num){vardigits=["","一","二","三","四","五","六","七","八","九"];varunits=["","十",&quo......
  • java 格式化输出当前时间
    /***打印当前时间**@return*/publicstaticvoidprintCurrentTime(Stringparam){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//关键所在TimeZonegmt=TimeZone.getTimeZone("GMT+8");sdf.setTimeZone(gmt);......
  • Java学习笔记(七)
    1、继承的注意事项子类继承父类时,没有继承父类的构造方法当一个类没有使用extends指定继承哪个父类时,则系统默认继承Object类在Java中,Object类是所有类的父类也叫做超类子类继承了父类,就继承了父类的方法和属性。Java不支持多继承,但支持多层继承2、对方法重写的理解方......
  • Java对象组成部分
    节选自《深入理解JAVA虚拟机》:在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(InstanceData)和对齐填充(Padding)。HotSpot虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有......
  • Java的初始化块
    三种初始化数据域的方法:在构造器中设置值在声明中赋值初始化块(initializationblock)初始化块在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。classEmployee{privatestaticintnextId;privateintid;privateStringname;......
  • java获取当前年份、月份和日期
    创建一个Calendar类的实例对象,Calendar类属于java.util包Calendarcalendar=Calendar.getInstance();获SimpleDateFormatformat=newSimpleDateFormat(“yyyy-MM-dd”);//获取当月第一天calendar=Calendar.getInstance();calendar.add(Calendar.MONTH,0);calendar......
  • JavaScript获取两个数组的差集
    constarra=['a','b','c','d','e'];constarrb=['b','e'];console.log("some:"+arra.filter(v=>!arrb.some((item)=>item===v)));console.log("find:&quo......
  • springboot入门时,发现Java版本与Spring boot版本无法对应导致错误的问题解决
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/......
  • Java自定义生成证书图片
    1、引入依赖<!--cmyk格式图片转换--><dependency><groupId>org.sejda.imageio</groupId><artifactId>webp-imageio</artifactId><version>0.1.6</version></dependen......