黑马程序员技术交流社区
标题:
Swith问题?
[打印本页]
作者:
曹思敏
时间:
2013-6-8 11:39
标题:
Swith问题?
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
作者:
张歆明
时间:
2013-6-8 11:47
JDK7之前:
switch仅仅接受:byte short int char 和枚举类型 不接受 long
JDK7之后 接受String类型
作者:
杨增坤
时间:
2013-6-11 10:35
switch语句的表达式必须是整数类型(char byte ushort short int long ),字符串类型,枚举类型,
case常量必须与表达式类型相对应,(兼容),同时case常量值必须互易,不能重复!!希望对你有所帮助!
作者:
夜默
时间:
2013-6-11 12:52
楼主你好 如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
作者:
slatop@qq.com
时间:
2013-6-11 15:22
我告诉你一个原则,你记住了就行了。
switch()内的是一个条件表达式,这个表达式是一个int。只要能自动提升为int型的变量都可以用作条件。
上面的话不懂的话看下面:
你把switch看做是一个函数。函数原型声明是这样的。switch(int x);你往里传的值必须是可以自动提升为int型的。
什么类型可以自动提升为int? 这个也不知道,那好吧。一并解答了
计算机语言一般分为8大基本类型。每个类型的占用字节数是不一样的,在不同的语言中占位大小和关键词也不一样,以下是java中的。从大到小的排序顺序是
布尔boolean 1个字节,字节型byte 1个字节,字符char 2个字节,短整型short 2个字节,整型int 4个字节,单精度浮点float 4个字节 ,长整型long 8个字节,双精度浮点double 16个字节。
一个字节也就是一个byte 等于 8个位bit 每一个位就是计算机的每一个二进制数。
java中使用强制类型转换,也就是说只能从低字节转向高字节,从高字节转向低字节须要显示强制转换。换句话说,只要是低于4个字节的基本类型都可以直接被提升为int型。
switch要求的是一个int型。所以byte char short int 都可以直接被转为int型,所以都可以使用。
但在java中有两个特殊情况是不能直接提升int的。如下:
1。一般情况下来说boolean也可以用的,但是java中将boolean封装成了字符串。而在其它计算机语言中,boolean的值是非0为真,0为假。在java中一个boolean在底层也是这个道理0为假,非0为真,但是java封装了它。一个boolean在java中返回表达式是一个特殊的字符串。注意这里说的字符串并不是指String之类的,而是在jvm内分配的一块常量内置数据空间中,其表面特征就是一个常量字符串。
2。同样4字节的float也不可以。原因是因为float的内存排列顺序与整数不同。浮点数的内存排序并不单纯是按位计算的,而是分两个部分,第一部分叫指数位,用来计录小数点的位置,第二部分叫有效数位,用来计录浮点数的精度。
说到这里我想你应该知道了switch里可以用什么类型了。答应我就不告诉你了,好好看一下我上面的理论,举一反三中,我相信你能得到自己想要的答案,并且在以上的理论中你还可以得到除了问题之外的更多知识。
作者:
Heart
时间:
2013-6-12 11:05
在switch(num)中,num只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。而long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
但是在JDK 7之后,switch(num)中,num可以是字符串。
作者:
麦子
时间:
2013-6-12 11:12
switch允许的数据类型有 byte、short、int、char、枚举 等
另外需要注意的是:其条件表达式数据类型需和case后的常量一致,这点容易忽视
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2