好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java switch支持的数据类型详解

switch支持的数据类型

随着Java的不断发展,switch支持的数据类型也有了变化,下面就来讲述switch如何来实现对新增数据类型的支持。

支持的数据类型

基本数据类型:int,byte,short,char 基本数据类型封装类:Integer,Byte,Short,Character 枚举类型:Enum(JDK 5+开始支持) 字符串类型:String(JDK 7+ 开始支持)

实现

switch底层是使用int类型来判断的,int类型是四个字节的整数型类型,所以只要字节小于或等于4的整数型类型都是可以转化成int类型的,所以支持byte[1字节],short[2字节]都是可以理解的,long[8字节]超出了int的范围,因而不支持。

关于枚举和字符(串)也是转化为int类型间接实现的。

关于这一点,我们可以验证的,下面举例验证switch如何实现对枚举数据类型的支持。

直接上代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

public class SwitchTest {

     public static void main(String[] args) {

         Color color = Color.YELLOW;

         switch (color) {

         case RED:

             System.out.println( "RED:" + color.getName());

             break ;

         case YELLOW:

             System.out.println( "GREEN:" + color.getName());

             break ;

         case BLUE:

             System.out.println( "BLUE:" + color.getName());

             break ;

         case BLANK:

             System.out.println( "BLANK:" + color.getName());

             break ;

         default :

             System.out.println( "DEFAULT" );

             break ;

         }

     }

    

     public enum Color {    

         RED( "红色" , 1 ),

         YELLOW( "绿色" , 2 ),

         BLUE( "蓝色" , 3 ),

         BLANK( "黑色" , 4 );

        

         private String name;

         private int index;

         private Color(String name, int index) {

             this .name = name;

             this .index = index;

         }

         public static String getName( int index) {

             for (Color c : Color.values()) {

                 if (c.getIndex() == index) {

                     return c.name;

                 }

             }

             return null ;

         }

         public String getName() {

             return name;

         }

         public void setName(String name) {

             this .name = name;

         }

         public int getIndex() {

             return index;

         }

         public void setIndex( int index) {

             this .index = index;

         }      

     }

}

编译后生成了SwitchTest Color.class和SwitchTest.class 两个文件,打开编译成SwitchTest.class的过渡文件SwitchTest Color.class和SwitchTest.class两个文件,打开编译成SwitchTest.class的过渡文件SwitchTest Color.class和SwitchTest.class两个文件,打开编译成SwitchTest.class的过渡文件SwitchTestColor.class:

我们发现多了一个数组Color[] arrayOfColor,原来枚举是再编译的过程中产生了一个新的数组,switch是通过转化成数组的形式来实现对枚举类型的支持。

我们通过相同的方式也可以看到switch对String类型的支持也是通过将String转化为int类型得以实现的,这里就不再赘述。 switch对四种基本数据类型封装类的支持是通过对封装类的拆箱来实现的 点击了解

注意封装类不能为null,否则会报空指针异常的。

switch支持的10种数据类型和注意事项

switch支持的数据类型

【切记不支持long、double、float及其包装类型】

基本数据类型:char,byte, short, int 包装数据类型: Character,Byte,Short,Integer 枚举类型:Enum 字符串类型:String(Jdk 7+ 开始支持)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

Color color = Color.RED;

switch (color) {

     case RED:

         System.out.println( "red" );

         break ;

     case BLUE:

         System.out.println( "blue" );

         break ;

     case YELLOW:

         System.out.println( "yellow" );

         break ;

     default :

         System.out.println( "default" );

switch注意事项

case 里面必须跟 break,不然程序会一个个 case 执行下去,直到最后一个 break 的 case 或者 default 出现 case 条件里面只能是常量或者字面常量,而且不能为null,否则编译报错 default 语句可有可无,最多只能有一个 建议在switch语句前判断参数是否为null:switch的参数不能为null,否则会报空指针异常【null的类型不确定】

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public class Demo {

     public static void main(String[] args) {

         new Demo().go( null );

     }

     public void go(String str) {

         switch (str) {

             case "null" :

                 System.out.println( "null" );

                 break ;

             case "123" :

                 System.out.println( 123 );

                 break ;

             default :

                 System.out.println( "default" );

         }

     }

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/qq_37893505/article/details/91538833

查看更多关于Java switch支持的数据类型详解的详细内容...

  阅读:22次