黑马程序员技术交流社区

标题: switch后面跟的表达式的值只能是数值么? [打印本页]

作者: jing迪    时间: 2013-11-4 16:08
标题: switch后面跟的表达式的值只能是数值么?
本帖最后由 jing迪 于 2013-11-4 16:29 编辑

switch后面跟的表达式的值只能是数值么??
为什么不能是boolean类型的值??
视频上说的switch后面要跟表达式  

表达式的定义是什么?
我所知道的表达式是由一个或者多个操作数通过多个操作符链接而成的式子
既然switch后面可以跟表达式 为什么不能跟boolean类型的表达式???

boolbean b = true;
switch (b)
{
        case true:
       break;
       case  false:
       break;
}
为啥不行 求解答  难道boolean类型的表达式不能放在switch后面吗?只能放结果是数值类型的表达式 ?

作者: Mr.Z.Lee    时间: 2013-11-4 16:11
switch也相当一个循环,case后边跟的是满足条件,所以必须是一个常量,或者常量表达式,意思就是必须跟一个唯一值。只有当条件满足这个唯一值得时候才会执行满足条件的代码,如果不满足会继续下一个case,直到找到满足的条件,如果都不满足就执行default,不知道这么说你是否明白?
作者: jing迪    时间: 2013-11-4 16:16
Mr.Z.Lee 发表于 2013-11-4 16:11
switch也相当一个循环,case后边跟的是满足条件,所以必须是一个常量,或者常量表达式,意思就是必须跟一个 ...

true  和 false 不是boolean型常量么  为何不行??
作者: ciowok    时间: 2013-11-4 16:16
1.6或以前表达式只能是 byte short char int 类型.
1.7可以是String类型.
作者: 王裕秋    时间: 2013-11-4 16:17
switch(x)  x只能是这四种类型的byte;short;int;char
作者: ixiangfeng    时间: 2013-11-4 16:19
本帖最后由 ixiangfeng 于 2013-11-4 18:56 编辑

在switch(b)中,b只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,1.7新增String类型 所以,这些类型以及这些类型的包装类型也是可以的。显然,long类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它不能作用于swtich语句中
作者: ixiangfeng    时间: 2013-11-4 16:21
boolean类型的是不行的 这是语法规定 不要问为什么 只要去记住它就行了
作者: Mr.Z.Lee    时间: 2013-11-4 16:24
看看附件里面那一串英文提示,你就知道什么意思了,是sun公司规定的。

未命名.jpg (21.2 KB, 下载次数: 347)

未命名.jpg

作者: jing迪    时间: 2013-11-4 16:26
ixiangfeng 发表于 2013-11-4 16:21
boolean类型的是不行的 这是语法规定 不要问为什么 只要去记住它就行了

刚试了一下  string 和char都可以的  
作者: 唐宋元明清    时间: 2013-11-4 16:28
简单来说如果,我的理解是switch的作用是在你有很多选择的条件下使用的,根据表达式的值来确定case,这里有个前提就是选择比较多为了方便才使用switch。
如果你的表达式是boolean 型的话,那结果无非trun和false两种,这样的话完全没必要使用switch,使用if是最佳的。
所以,1.6或以前表达式只能是 byte short char int 类型.
1.7可以是String类型.这样就完全够使用了。并且也是最佳的。
作者: 麦者    时间: 2013-11-4 16:29
本帖最后由 麦者 于 2013-11-4 16:39 编辑

java中的switch中表达式的值可以是byte、short、char、int、enum、String,JDK1.7加入了String类,和枚举类是新特性,注意在用枚举类的时候要注意小细节:
  1. switch(number){
  2. case ONE:
  3.         break;
  4. case TWO:
  5.         break;
  6. }
复制代码
即直接用枚举的常量,不需要再用 number.ONE 来表示。
作者: ixiangfeng    时间: 2013-11-4 16:32
jing迪 发表于 2013-11-4 16:26
刚试了一下  string 和char都可以的

不好意思  刚才去试了下 String类也是可以的 去查了一下发现这是在JAVA7 改进的  char是可以的 这个我上面说过 它可以自动转成int类型的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2