我告诉你一个原则,你记住了就行了。
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里可以用什么类型了。答应我就不告诉你了,好好看一下我上面的理论,举一反三中,我相信你能得到自己想要的答案,并且在以上的理论中你还可以得到除了问题之外的更多知识。 |