Java switch()括號(hào)內(nèi)參數(shù)的類型要求詳解
switch()括號(hào)內(nèi)參數(shù)的類型要求
先聲明一點(diǎn),本人用的時(shí)jdk11,進(jìn)行的探究。
先說(shuō)結(jié)論:switch()的參數(shù)類型可以是:int,byte,short;String;char;enum
一般我們都是這么使用switch()的,一般括號(hào)內(nèi)參數(shù)寫(xiě)的都是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;
}
}
}
//毫無(wú)疑問(wèn),括號(hào)內(nèi)是 int 數(shù)據(jù),可以編譯運(yùn)行
那么,括號(hào)內(nèi)可以是byte,short,long,float,double,char,String,boolean類型的數(shù)據(jù)嗎?
先說(shuō)一下結(jié)論:
- byte,short,int 沒(méi)問(wèn)題
- long,float,double 會(huì)報(bào)錯(cuò),但是可以再括號(hào)內(nèi)將他們轉(zhuǎn)化為 int ,就沒(méi)問(wèn)題了
- 從jdk1.7開(kāi)始,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ò)了,說(shuō)明 long 不行
而且從報(bào)錯(cuò)的說(shuō)明可以看出,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)過(guò)評(píng)論區(qū)ycxy_ZHT的補(bǔ)充:enum類型也是可以的
switch()中不允許的數(shù)據(jù)類型有?
浮點(diǎn)型
浮點(diǎn)型無(wú)法精確比較,由于精度問(wèn)題。
字符串
字符串沒(méi)有直接的比較操作符可以使用,只能通過(guò)strcmp之類的函數(shù)進(jìn)行比較,也不適合。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot?如何生成微信小程序短連接及發(fā)送短信在短信中打開(kāi)小程序操作
最近遇到這樣的需求需要發(fā)送短信,通過(guò)短信中的短連接打開(kāi)小程序操作,下面小編給大家分享Spring?Boot?如何生成微信小程序短連接發(fā)送短信在短信中打開(kāi)小程序操作,感興趣的朋友跟隨小編一起看看吧2024-03-03
實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)開(kāi)發(fā)醫(yī)院科室及排班的接口
這篇文章主要為大家介紹了實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)開(kāi)發(fā)醫(yī)院科室及排班的接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-04-04
使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解
這篇文章主要介紹了用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用,本文通過(guò)實(shí)例代碼詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
SpringBoot2零基礎(chǔ)到精通之?dāng)?shù)據(jù)與頁(yè)面響應(yīng)
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開(kāi)發(fā)的腳手架2022-03-03

