黑马程序员技术交流社区

标题: 关于switch的疑问 switch的作用范围 [打印本页]

作者: 罗闯    时间: 2012-3-29 16:34
标题: 关于switch的疑问 switch的作用范围
中午下了一段代码,其中用到了判断语句switch   往switch中传入了  int类型合适,但是String和long却不行

问问:switch的作用范围,为什么它不能作用在String和long上。
作者: 龚龙    时间: 2012-3-29 16:37
switch(x)  这个x的类型只能是int 或是枚举类型,其他类型都不行!
作者: 刘士    时间: 2012-3-29 16:40
switch(ex)中,ex是一个整数表达式。
因此传递给switch和case语句的参数应该是int,short,char,byte
long,string都不能作用于swtich
作者: 曹魁    时间: 2012-3-29 16:45
本帖最后由 曹魁 于 2012-3-29 16:46 编辑

swtich()里面必须是int和enum--即枚举类型。
short、 char 或者 byte他会自动转换为int型,
long不能自动转换为int;再者long比int范围大,用的话可能会丢失精度。

Java语法是有标准规定的。
不过在JDK7.0的标准,switch是可以使用string类型。
作者: 何万县    时间: 2012-3-29 16:51
swtich()里面必须是int和enum--即枚举类型。
Java语法规定的。
不过在JDK7.0的标准,switch是可以使用string类型。
作者: 翟友伟    时间: 2012-3-29 16:53
在switch中只能加入 比int范围小的基本数据类型(也就是byte,short,int,char)
因为byte,short,char,,可以隐式的转换为int类型,
其实最后放的还是int类型
所以long, string不行
作者: izwj    时间: 2012-3-29 18:06
如果判断的具体数值不多,而且符合byte short int char这四种类型时使用switch
虽然也可以使用if,建议使用swtich语句。因为效率稍高。
对区间判断,对结果为boolean类型判断,使用if。
作者: 尹丽峰    时间: 2012-3-29 18:08
switch 只能用在 byte short int char这4个里哈
作者: 胡川    时间: 2012-3-29 18:45
swtich()里面必须是int和enum--即枚举类型。

short、 char 或者 byte他会自动转换为int的。。

long不能自动转换为int..
Java语法的标准规定的。Long型的占得数据位数太大了。不过在JDK7.0的标准,switch可以使用string类型了。

因为long比int范围大..可能会丢失精度..
作者: 李柯    时间: 2012-3-29 18:50
首先、在switch(c)中,c只能是整数表达式或者枚举常量。

其次、整数表达式可以是int基本类型或Integer包装类型,因为byte,short,char都可以隐含转换为int,
所以这些类型以及这些类型的包装类型也是可以的。

再次、long和String类型都不符合switch语法的规定,并且不能隐式的转换成int类型,
所以它们不能作用于switch语句中。
作者: 王运科    时间: 2012-3-29 18:56
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以自动转换为int,所以,这些类型以及这些类型的包装类型也是可以的。long和String类型都不符合switch的语法规定,并且不能被隐式(自动)转换成int类型,所以,它们不能作用于swtich语句中。
作者: 刘_浩    时间: 2012-3-29 18:59
switch()中可以是byte,short,int,char。
作者: 和心愿    时间: 2012-3-29 19:33
jdk1.7以前switch()中可以是byte,short,int,char。以及枚举类型
从jdk1.7开始可以放String类型,他其实在底层调用的是String的hashcode方法得到穿进去的String对象的hashcode值,即还是以数值型的数据进行判断
int    hashCode()   Returns a hash code for this string.     hashCode()方法返回的是int类型值

作者: 姚伟涛    时间: 2012-3-29 19:47
switch(expr1)中,expr1是一个整数表达式。因此传递给switch和case语句的参数应该是int、short、char或则byte。long,string都不能作用于swtich





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