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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹思敏 中级黑马   /  2013-6-8 11:39  /  1389 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

  

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
JDK7之前:
switch仅仅接受:byte short int char 和枚举类型  不接受 long

JDK7之后  接受String类型

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
switch语句的表达式必须是整数类型(char byte ushort short int long ),字符串类型,枚举类型,
case常量必须与表达式类型相对应,(兼容),同时case常量值必须互易,不能重复!!希望对你有所帮助!
回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
回复 使用道具 举报
我告诉你一个原则,你记住了就行了。
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里可以用什么类型了。答应我就不告诉你了,好好看一下我上面的理论,举一反三中,我相信你能得到自己想要的答案,并且在以上的理论中你还可以得到除了问题之外的更多知识。
回复 使用道具 举报 1 0
在switch(num)中,num只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。而long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

但是在JDK 7之后,switch(num)中,num可以是字符串。
回复 使用道具 举报
麦子 中级黑马 2013-6-12 11:12:05
7#

switch允许的数据类型有 byte、short、int、char、枚举 等
另外需要注意的是:其条件表达式数据类型需和case后的常量一致,这点容易忽视
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马