黑马程序员技术交流社区

标题: switch语句能否作用在byte上,能否作用在long上,能否作用在String上? [打印本页]

作者: 小飞龙    时间: 2012-7-19 15:05
标题: switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
作者: 蒋映辉    时间: 2012-7-19 15:08
不能  只能是基本数据类型....
作者: 山水游客    时间: 2012-7-19 15:14
switch(x)中,x必须是整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
作者: 孙新强    时间: 2012-7-19 15:26
switch(x)  这个x的取值可以为:
一: byte、short、int、char
二: 枚举类型(这个好像是jdk1.5或jdk1.6之后版本才能使用  具体哪个 我记不太清了)
作者: 王宝康    时间: 2012-7-19 15:56
本帖最后由 王宝康 于 2012-7-19 15:58 编辑

switch语句为多路分支语句,它的基本语法为:            

               switch (expr) {
                       case value1:
                           statements;
                          break;
                          ...
                     case valueN:
                            statements;
                            break;

                      default:
                          statements;
                         break;
                         }

     switch语句的使用注意事项:

a、

在switch(expr)语句中,expr表达式的类型必须是与int类型兼容的基本类型,所谓与int类型兼容,就是指能自动转换为int类型,因为expr表达式的合法类型包括byte、  short、char和int类型,long和浮点类型不能自动转换为int类型,因此不能作为expr表达式的类型。

     double d = 11.2;

    switch(d){//编译出错,类型不匹配

                    }

b、在case valueN子句中,valueN必须满足以下条件:

     1、valueN的类型必须是与int类型兼容的基本类型,包括byte、  short、char和int类型

     2、valueN必须是常量

     3、各个case子句的valueN表达式的值不同

int x = 4,y = 3;  
.final byte z = 4;  
switch (x) {  
case 1://合法  
  System.out.println("1");  
  break;  
case 4/3+1://合法,4/3+1为int类型的常量表达式  
  System.out.println("2");  
  break;  
case 1://编译出错,不允许出现重复的case表达式  
  System.out.println("repeat 1");  
  break;  
case y://编译出错,y不是常量  
System.out.println("3");  
  break;  
case z://合法,z是与int兼容的常量  
System.out.println("4");  
  break;  
case 5,6,7://编译出错,case表达式的语法不正确  
  System.out.println("5,6,7");  
break;  
default:  
  break;  
}  

int x = 4,y = 3;
final byte z = 4;
switch (x) {
case 1://合法
  System.out.println("1");
  break;
case 4/3+1://合法,4/3+1为int类型的常量表达式
  System.out.println("2");
  break;
case 1://编译出错,不允许出现重复的case表达式
  System.out.println("repeat 1");
  break;
case y://编译出错,y不是常量
  System.out.println("3");
  break;
case z://合法,z是与int兼容的常量
  System.out.println("4");
  break;
case 5,6,7://编译出错,case表达式的语法不正确
  System.out.println("5,6,7");
  break;
default:
  break;
}

c、在switch语句中最多只能有一个default子句,default子句是可选的。当switch表达式的值不与任何case子句匹配时,程序执行default子句,假如没有default子句,则程序直接跳出switch语句,default子句可以位于switch语句中的任何位置,通常都将default子句放在所有case子句的后面

d、如果switch表达式与某个case表达式匹配,或者与default情况匹配,就从这个case子句或者default子句开始执行,假如遇到break语句,就跳出整个switch语句,否则一次执行switch语句中的后续的case子句,不再检查case表达式的值

int x = 5;  
    switch (x) {  
    default:  
        System.out.println();//x与default情况匹配,因此从这行开始执行  
        break;  
    case 1:  
        System.out.println("case1");  
    case 2:  
        System.out.println("case2");  
    case 3:  
        System.out.println("case3"); break;  
    case 4:  
        System.out.println("case4");      
    }  
      
    以上代码的打印结果为:  
    default  
    case1  
    case2  
    case3  

int x = 5;
        switch (x) {
        default:
                System.out.println();//x与default情况匹配,因此从这行开始执行
                break;
        case 1:
                System.out.println("case1");
        case 2:
                System.out.println("case2");
        case 3:
                System.out.println("case3"); break;
        case 4:
                System.out.println("case4");        
        }
        
        以上代码的打印结果为:
        default
        case1
        case2
        case3
e、switch语句的功能也可以用if...else语句来实现

在某些情况下,假如决定流程分支的条件表达式的类型与int类型兼容,则使用switch语句会使程序更加简洁,可读性更强。而if...else语句的功能比switch语句的功能更强大,它能够灵活控制各种复杂的流程分支。
更多关于循环控制的用法与知识点,可以看一下我的博客中关于循环控制的一些总结,http://blog.csdn.net/wangbaokangfei/article/details/7759045
作者: 黄锐    时间: 2012-7-19 16:02
整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以强转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被强转换成int类型,所以,它们不能作用于swtich语句中。
作者: 周玉龙    时间: 2012-7-19 16:11
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

作者: 柳雷    时间: 2012-7-20 00:33
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
作者: 丁二跃    时间: 2012-7-20 00:39
jdk 1.7 版本中switch 已经支持了 String

可惜……我没有试验过

:'( jdk 1.6 已经过时了 我们还在学习 1.5 啊
作者: 郑彬    时间: 2012-7-20 08:34
符合byte short int char这四种类型。可以使用swtich语句。因为可以转换为byte short char可以默认转化为int类型。以int为比较基本。而string long 不能转换,所以不行。
作者: themoon    时间: 2012-7-20 08:42
如果你非得要使用String类型与Long类型的数据,你可以试试强制类型转换。但是要注意的是,具我所知,Switch(n)中的n只能为int及比int小的基本数制类型,也就是说,要可以转换成int型的。
作者: 程潇    时间: 2012-7-20 09:50
Switch语句可选择的类型如下:
1.int, byte, short, char
2.枚举类型(JDK1.5新增的)
3.String(Java7新增的)

另外,在1中switch只能放int类型的值,之所以byte, short, char类型也可以是因为byte, short, char可以自动提升(自动类型转换)为int,最后放的还是int类型。long类型不可以,是因为long类型不能自动转换为int类型,如果一定要用的话,可以先强制转换为int


作者: 王龙彪    时间: 2012-7-20 10:00
在switch(表达式)中,表达式只能是一个整数表达式或者枚举
整数表达式可以是int基本类型或Integer包装类型
byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。
long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。




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