• switch-case最容易忽视的一点


      switch语句是常用的一种java语法,但是往往最基本的,总是最容易被人们忽略。

      首先,看下switch语句的基本结构:

    switch(表达式){
            case 常量1:
                语句1;
                break;
            case 常量2:
                语句2;
                break;
            … …
            case 常量N:
                语句N;
                break;
            [default:
                语句;
                break;]
         } 

      从结构上很明显,可以看出case和break一一对应,那么,有一个问题:“是否只有case满足的情况下,才会执行内部的语句呢”,这个答案很多人觉得,那肯定的,真的吗?

      假如,满足了一个case,可是没有对应的break,那么,接下来的case内部的语句是否还会继续执行?满足的时候执行,不满足就不执行,真的是这样吗?看一个简单的例子:

    public class SwitchTest {
    
        public static void main(String[] args) {
            testSwitch(1);
        }
    
        private static void testSwitch(int i) {
            switch (i) {
            case 1:
                System.out.println(1);
            case 2:
                System.out.println(2);
                break;
            default:
                System.out.println(3);
            }
        }
    }

      观察代码可以看出,第一个case并没有与之对应的break,那么,输出结果是什么呢?估计很多人觉得很简单啊,答案是:1。

      但是,run一下,输出的结果是:1  2 

      也就是说,第二个case内部的语句也执行了,奇怪吗?刚开始我也觉得很奇怪,于是就只能查找资料,最后得出一个结果:

      swtich中的case并不带有判断功能(也就是说并不是满足执行,不满足就不执行),case只相当于识别标志,遇到了符合的case,swtich内部就会改变该标志,从这个标志点一直往下执行,直到遇到break才会跳出。

      所以上面执行到case 2的break才退出,如果把case 2 的break也删除,答案就是:1 2 3

  • 相关阅读:
    WingIIDE的licese破解方法
    HttpCookie
    Jquery中html()方法 and "click"绑定后代元素
    jquery 选择器多个
    input标签的type为select、radio、checkbox的使用
    c#中?和??使用
    VS中使用附加进程来调试项目
    刷新局部页面
    ant design vue 文件上传的集中页面
    vue 上传超大文件出现Uncaught (in promise) Error: Network Error at createError
  • 原文地址:https://www.cnblogs.com/handsomeye/p/6524643.html
Copyright © 2020-2023  润新知