A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

12 个回复

倒序浏览
不能  只能是基本数据类型....
回复 使用道具 举报
switch(x)中,x必须是整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
回复 使用道具 举报
switch(x)  这个x的取值可以为:
一: byte、short、int、char
二: 枚举类型(这个好像是jdk1.5或jdk1.6之后版本才能使用  具体哪个 我记不太清了)

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王宝康 于 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

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以强转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被强转换成int类型,所以,它们不能作用于swtich语句中。
回复 使用道具 举报
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
柳雷 中级黑马 2012-7-20 00:33:02
8#
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
jdk 1.7 版本中switch 已经支持了 String

可惜……我没有试验过

:'( jdk 1.6 已经过时了 我们还在学习 1.5 啊
回复 使用道具 举报
符合byte short int char这四种类型。可以使用swtich语句。因为可以转换为byte short char可以默认转化为int类型。以int为比较基本。而string long 不能转换,所以不行。
回复 使用道具 举报
如果你非得要使用String类型与Long类型的数据,你可以试试强制类型转换。但是要注意的是,具我所知,Switch(n)中的n只能为int及比int小的基本数制类型,也就是说,要可以转换成int型的。
回复 使用道具 举报
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

回复 使用道具 举报
在switch(表达式)中,表达式只能是一个整数表达式或者枚举
整数表达式可以是int基本类型或Integer包装类型
byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。
long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马