zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    初始Openwrt
    Angular CLI 使用教程指南参考
    Visual Studio Code怎么在同一窗口打开多个项目文件?
    mysql查看数据表是否有重复数据
    Angular UI框架 Ng-alain @delon的脚手架的生成开发模板
    VS2010 WDK7.1.0 Win7_64
    Nodejs使用TLS
    python定时执行方法
    Visual Studio Code 使用Git进行版本控制
    VSCode中设置Python解释器和pylint的波浪线问题
  • 原文地址:https://www.cnblogs.com/handsomeye/p/6524643.html
Copyright © 2011-2022 走看看