Java switch()括號(hào)內(nèi)參數(shù)的類型要求詳解
switch()括號(hào)內(nèi)參數(shù)的類型要求
先聲明一點(diǎn),本人用的時(shí)jdk11,進(jìn)行的探究。
先說結(jié)論:switch()的參數(shù)類型可以是:int,byte,short;String;char;enum
一般我們都是這么使用switch()的,一般括號(hào)內(nèi)參數(shù)寫的都是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;
}
}
}
//毫無疑問,括號(hào)內(nèi)是 int 數(shù)據(jù),可以編譯運(yùn)行
那么,括號(hào)內(nèi)可以是byte,short,long,float,double,char,String,boolean類型的數(shù)據(jù)嗎?
先說一下結(jié)論:
- byte,short,int 沒問題
- long,float,double 會(huì)報(bào)錯(cuò),但是可以再括號(hào)內(nèi)將他們轉(zhuǎn)化為 int ,就沒問題了
- 從jdk1.7開始,String 也可以
- char 也可以
- boolean會(huì)報(bào)錯(cuò),而且boolean是不能強(qiáng)制轉(zhuǎn)換成int的
下面是對(duì)每個(gè)數(shù)據(jù)類型的探究:
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;
}
}
}
//括號(hào)內(nèi)可以是 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;
}
}
}
//括號(hào)內(nèi)可以是 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;
}
}
}
//編譯時(shí)報(bào)錯(cuò)了,說明 long 不行
而且從報(bào)錯(cuò)的說明可以看出,switch()括號(hào)內(nèi)的參數(shù)要是int型,
而上面的 short,byte,之所以也行,是因?yàn)樗鼈冊(cè)诶ㄌ?hào)內(nèi)完成了基本數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換,自動(dòng)轉(zhuǎn)換成int了

再對(duì) long 探究一下,我在括號(hào)內(nèi)把long強(qiáng)制轉(zhuǎn)換成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;
}
}
}
//編譯運(yùn)行都成功了
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;
}
}
}
報(bào)錯(cuò)情況和 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是不能強(qiáng)制轉(zhuǎn)換成int的

枚舉類型enum
經(jīng)過評(píng)論區(qū)ycxy_ZHT的補(bǔ)充:enum類型也是可以的
switch()中不允許的數(shù)據(jù)類型有?
浮點(diǎn)型
浮點(diǎn)型無法精確比較,由于精度問題。
字符串
字符串沒有直接的比較操作符可以使用,只能通過strcmp之類的函數(shù)進(jìn)行比較,也不適合。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的兩種常見簡(jiǎn)單查找算法示例【快速查找與二分查找】
這篇文章主要介紹了Java實(shí)現(xiàn)的兩種常見簡(jiǎn)單查找算法,結(jié)合具體實(shí)例形式分析了java快速查找與二分查找的原理與簡(jiǎn)單實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09
Java實(shí)戰(zhàn)之基于I/O流設(shè)計(jì)的圖書管理系統(tǒng)
這篇文章主要介紹了Java實(shí)戰(zhàn)之基于I/O流設(shè)計(jì)的圖書館管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
spring AOP定義AfterThrowing增加處理實(shí)例分析
這篇文章主要介紹了spring AOP定義AfterThrowing增加處理,結(jié)合實(shí)例形式分析了spring面向切面AOP定義AfterThrowing相關(guān)實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下2020-01-01
Java純代碼實(shí)現(xiàn)導(dǎo)出pdf
在項(xiàng)目開發(fā)中,產(chǎn)品的需求越來越奇葩啦,開始文件下載都是下載為excel的,做著做著需求竟然變了,要求能導(dǎo)出pdf,所以本文就來用Java實(shí)現(xiàn)導(dǎo)出pdf功能吧2023-12-12

