Java switch()括号内参数的类型要求详解

网友投稿 293 2022-09-23


Java switch()括号内参数的类型要求详解

目录switch()括号内参数的类型要求byteshortlongfloatdoubleStringcharbooleanswitch()中不允许的数据类型有?浮点型字符串

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

pubhttp://lic 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之类的函数进行比较,也不适合。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:配置通过流策略实现限速
下一篇:2020-03-25 DES, 3DES, AES简介(2020-03-2540685)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~