switch用法
首先我们要了解:
switch中文的意思就是转换,break也就是打断的意思
switch怎么用,其实和if差不多
switch(变量){
case 常量 :
语句块
break;
//也可以有多个case
default :
语句块
break;
}
括号内只可以使用byte,short ,int,char类型的变量(然而这是JDK1.7之前的事)
JDK1.7之后还可以支持一种叫String 类型的变量
现如今已是2018年最新版的就是JDK1.10了
那么为什么1.7之前只能支持上面的四种呢?
首先我们要知道一个常识:相同类型的东西才可以去比较
计算机也是这样
因为我们case后免跟的是常量,而常量默认是int类型的
byte,short,char运算时自动提升成int
那么就变成int类型和int类型比较了
最后一个int也肯定是可以用的
先来一个小栗子:
用if看起来有点麻烦,因为这里只做了1~3的假如这个数为100呢?
那岂不是要写100if(写个简单的判断,肯定不可能会去写这么多)
那么来试一下switch吧:
运行结果:
咱们要来理解一下这个switch到底是怎么判断的,嗯。
1.得到括号内变量的值,
然后与第一个case后的常量做等值判断
值相等运行这个case 冒号后的语句
遇到break直接跳出循环结束这个switch
2.接下来也是一样的
假如第一个case的值不想等
就将第二个case的值拿去比较
继续上面值相等的操作
3.default相当于if中的else
假如一个case都不想等,就执行default里语句
default和else一样,可以写可以不写,完全看需求
我们再看一个小需求,使用switch的另一种方式:
两种结果
1.月数正确
2.月数错误
其实我们只要理解了break这个关键字
就可以理解我为什么case连着写了
switch中假如遇到了一个case,并且值相等,
就会运行这个case冒号后的语句,
如果在这个语句后面如果没用break
就会直接执行后面case冒号后的代码(无论结果是否相等)
直到遇到一个break时,才跳出(停止)整个switch。
由于1.3.5.7.8.10.12月都是31天
我就把case写成一排,前面的case冒号后什么都不写
只在最后一个case中写到days = 31 ;
然后在写一个break;
其实这样的效率是最高的
假如我们的是1月,第一个case就满足了
然后就去执行冒号后面发现是空的
就去找下一个case的冒号后面(因为没遇到break),发现也是空的
直到找到case 12 这个,把days 变成 31 ,遇到break,然后跳出switch
30天的也是一样的逻辑。