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。

  

 

转载于:https://www.cnblogs.com/lzeffort/p/8151219.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值