switch()括號內參數的類型要求
先聲明一點,本人用的時jdk11,進行的探究。
先說結論:switch()的參數類型可以是:int,byte,short;String;char;enum
一般我們都是這么使用switch()的,一般括號內參數寫的都是int型
public class Demo{ public static void main(String[] args){ int a = 1; switch(a){ case 1: System.out.println("我是1");break; case 2: System.out.println("我是2");break; } } } //毫無疑問,括號內是 int 數據,可以編譯運行
那么,括號內可以是byte,short,long,float,double,char,String,boolean類型的數據嗎?
先說一下結論:
- byte,short,int 沒問題
- long,float,double 會報錯,但是可以再括號內將他們轉化為 int ,就沒問題了
- 從jdk1.7開始,String 也可以
- char 也可以
- boolean會報錯,而且boolean是不能強制轉換成int的
下面是對每個數據類型的探究:
byte
public class Demo{ public static void main(String[] args){ byte a = 1; switch(a){ case 1: System.out.println("我是1");break; case 2: System.out.println("我是2");break; } } } //括號內可以是 byte
short
public class Demo{ public static void main(String[] args){ short a = 1; switch(a){ case 1: System.out.println("我是1");break; case 2: System.out.println("我是2");break; } } } //括號內可以是 short
long
public class Demo{ public static void main(String[] args){ long a = 1; switch(a){ case 1: System.out.println("我是1");break; case 2: System.out.println("我是2");break; } } } //編譯時報錯了,說明 long 不行
而且從報錯的說明可以看出,switch()括號內的參數要是int型,
而上面的 short,byte,之所以也行,是因為它們在括號內完成了基本數據類型的自動轉換,自動轉換成int了
再對 long 探究一下,我在括號內把long強制轉換成int,看看行不行:
public class Demo{ public static void main(String[] args){ long a = 1; switch((int)a){ case 1: System.out.println("我是1");break; case 2: System.out.println("我是2");break; } } } //編譯運行都成功了
float
public class Demo{ public static void main(String[] args){ float a = 1; switch(a){ case 1.0: System.out.println("我是1.0");break; case 2.0: System.out.println("我是2.0");break; } } }
報錯情況和 long 差不多
double
public class Demo{ public static void main(String[] args){ double a = 1; switch(a){ case 1.0: System.out.println("我是1.0");break; case 2.0: System.out.println("我是2.0");break; } } }
情況也和 long,float 的差不多
String
public class Demo{ public static void main(String[] args){ String a = "1"; switch(a){ case "1": System.out.println("我是1");break; case "2": System.out.println("我是2");break; } } } //String 可以
char
public class Demo{ public static void main(String[] args){ char a = 'a'; switch(a){ case 'a': System.out.println("我是a");break; case 'b': System.out.println("我是b");break; } } } // char 也行
boolean
public class Demo{ public static void main(String[] args){ boolean a = true; switch(a){ case true: System.out.println("我是true");break; case false: System.out.println("我是false");break; } } } //boolean 不行,而且boolean是不能強制轉換成int的
枚舉類型enum
經過評論區ycxy_ZHT的補充:enum類型也是可以的
switch()中不允許的數據類型有?
浮點型
浮點型無法精確比較,由于精度問題。
字符串
字符串沒有直接的比較操作符可以使用,只能通過strcmp之類的函數進行比較,也不適合。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://zhangguohao.blog.csdn.net/article/details/88571143