switch语法的盲点
switch语法在项目使用的频率很低,今天看到一个相关的例子引发一些思考,,同时自己也写了一些简单的例子如下:
实例1:
int dayOfWeek = 5;
switch (dayOfWeek){
default:
System.out.println("default");
case 1:
System.out.println("1111");
case 2:
System.out.println("2222");
case 4:
System.out.println("3333");
}
运行结果:
default
1111
2222
3333
实例2:
int dayOfWeek = 5;
switch (dayOfWeek){
default:
System.out.println("default");
case 1:
System.out.println("1111");
case 2:
System.out.println("2222");
//diff
case 5:
System.out.println("3333");
}
运行结果:
3333
实例3:
int dayOfWeek = 5;
switch (dayOfWeek){
case 1:
System.out.println("1111");
//diff
case 5:
System.out.println("5555");
case 2:
System.out.println("2222");
default:
System.out.println("default"); }
运行结果:
5555
2222
default
为了弄清楚这是怎么回事,首先从JDK文档入手。从文档可以了解一下几点。
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.11
1.如果switch表达式中的值与case常量其中一个相等,可以说与case的标签是匹配的,在switch块中,在当前匹配的case的后面的语句,不管是否匹配都将会执行。
2.如果没有与case标签相匹配的,但是存在default标签,在switch块中,default以及default后面的语句都将会顺序执行。
3.既没有case标签匹配也没有default标签,switch中的语句将不会执行。
实例1对应情况是2,实例3对应情况3.
如何来避免这种情况?使用break。
继续看一下其他语言的情况。
一、JavaScript
var dayOfWeek = 5
switch (dayOfWeek){
default:
console.log("default javascript")
case 1:
console.log("1111")
case 2:
console.log("2222")
case 4:
console.log("4444")
}
运行结果:
default javascript
1111
2222
4444
var dayOfWeek = 2
switch (dayOfWeek){ case 1:
console.log("1111")
case 2:
console.log("2222")
case 4:
console.log("4444")
default:
console.log("default javascript")
}
运行结果:
2222
4444
default javascript
二、C
int day_week = 5;
switch(day_week){
default : printf("%s\n", "default c");
case 1: printf("%s\n", "1111");
case 2: printf("%s\n", "2222");
case 3: printf("%s\n", "3333"); }
运行结果:
default c
1111
2222
3333
int day_week = 2;
switch(day_week){
case 1: printf("%s\n", "1111");
case 2: printf("%s\n", "2222");
case 3: printf("%s\n", "3333");
default : printf("%s\n", "default c");
}
运行结果:
2222
3333
default c
三、Python并没有switch
Why isn’t there a switch or case statement in Python?
You can do this easily enough with a sequence of if... elif... elif... else. There have been some proposals for switch statement syntax, but there is no consensus (yet) on whether and how to do range tests. See PEP 275 for complete details and the current status.
链接https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python
总结
这些语言对switch的词法分析都是一样的。switch这东西用的少,但是用的时候不要忘了break。
switch语法的盲点的更多相关文章
- Thymeleaf系列五 迭代,if,switch语法
1. 概述 这里介绍thymeleaf的编程语法,本节主要包括如下内容 迭代语法:th:each; iteration status 条件语法:th:if; th:unless switch语法: ...
- go基础——switch语法
package main import "fmt" /* switch语法结构: switch 变量名 { case 数值1:分支1 case 数值2:分支2 ... defaul ...
- switch语法
1. js 代码 // 1. switch 语句也是多分支语句 也可以实现多选1 // 2. 语法结构 switch 转换.开关 case 小例子或者选项的意思 // switch (表达式) { / ...
- switch语法中break,default作用说明
转自:http://cjhbest999.iteye.com/blog/1137124 关于java中switch使用的一些说明 switch(表达式) { case 常量表达式1:语句1; .... ...
- switch语法之PHP
$a = 100; switch ($a) { case 100: echo '满分'; break; case $a >=60: echo '及格'; break; }
- if条件和for循环语句、while、do..while、switch语法
//if 语句 ; ) { NSLog(@"不及格"); }) { NSLog(@"及格"); } //if语句 判断条件存在多个情况下,判断一个年是否为润年 ...
- shell中switch语法
转载: https://blog.csdn.net/love__coder/article/details/7262160
- switch语句下的变量声明和定义
switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...
- go 基础语法
时间有限,简单记一些常用的,麻烦的不写了 定义变量:可以连续定义,也可以单个定义 var a int int类型 var a="ds" 默认string类型 a:=&qu ...
随机推荐
- Unity OBB分包(基础APK+OBB) 与apk签名
1.OBB (Opaque Binary Blob)文件格式,是安卓游戏通用数据包.在一些大型游戏上较为常见,同时还附以Data文件,亦或是md5.dat文件出现 产生原因:由于某些平台对于apk上传 ...
- LabVIEW初篇---前言
最早接触labview,是研二的时候,2007年,当时为了补贴家用,改善生活.自己拿着本科毕业证去找工作,去一个企业面试,当时,面试的主考官,问了会什么吗,比如PLC.单片机啥的?那时候的自己,基本上 ...
- 浅谈如何写出一个让(坑)人(王)很(之)难(王)发现的bug
该文章内容来自脚本之家,原文链接:https://www.jb51.net/news/598404.html 程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因 ...
- [JSON].exists( keyPath )
语法:[JSON].exists( keyPath ) 返回:[True | False] 说明:检测指定键名路径是否存在 示例: Set jsonObj = toJson("{div:{' ...
- [Clr via C#读书笔记]Cp14字符字符串和文本处理
Cp14字符字符串和文本处理 字符 System.Char结构,2个字节的Unicode,提供了大量的静态方法:可以直接强制转换成数值: 字符串 使用最频繁的类型:不可变:引用类型,在堆上分配,但是使 ...
- Python3 Tkinter-Label
1.创建 from tkinter import * root=Tk() root.title('Hello tkinter!') root.mainloop() 2.使用内置位图 from tkin ...
- 卸载CDH5.7
CDH5.7卸载1.记录用户数据目录2.关闭所有服务2.1在CM中,选择某个集群,然后停止集群.2.2逐个关闭CDH中的服务3.删除parcels4.删除集群5.卸载Cloudera manager ...
- Java 集合框架之 Map
Hashtable Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子.容量 是哈希表中桶 的数量,初始容量就是哈希表创建时的容量.注意,哈希表的状态为 open:在发生“哈希冲突” ...
- 【Linux】- CentOS 防火墙iptables和firewall
1 iptables防火墙 1.1 基本操作 # 查看防火墙状态 service iptables status # 停止防火墙 service iptables stop # 启动防火墙 s ...
- oracle 11g ADG实施手册(亲测,已成功部署多次)
一:实验环境介绍 虚拟机系统: RHEL Linux 6.4(64位) 数据库版本: Oracle 11gR2 11.2.0.4 (64位) IP地址规划: 主数据库 192.168.11 ...