实用 AI

可在线运行 AI 集合,涵盖 AI 文案生成、写作辅助、AI 绘图与照片修复、AI 配音、字幕生成、语音转录以及 AI 视频创作和数字人等多种 AI 服务

查看详情

switch语句的使用

深入学习Java基础知识
2021-05-17 14:29 · 阅读时长5分钟

switch语句在开发中经常会用到,它主要用于替换多个if/else语句,提高代码的可读性。基础用法如下

1public class Main {
2
3    public static void main(String[] args) {
4        String condition = "abc";
5        switch (condition) {
6            case "abc": {
7                System.out.println("condition is abc");
8            }
9            break;
10            case "def": {
11                System.out.println("condition is def");
12            }
13            break;
14            default: {
15                System.out.println("condition isn't abc or edf");
16            }
17        }
18    }
19}
注意: 这个Java运行环境不支持自定义包名,并且public class name必须是Main

需要注意的是,在case代码块,如果命中之后不需要执行下面的case,一定要记得添加break语句。

目前swicth语句支持的类型有

  • byte and Byte
  • short and Short
  • int and Integer
  • char and Character
  • enum
  • String

而且值不能为null,另外在Java 7以前,switch语句是不支持字符串类型的,在Java 7及以后,在switch中使用字符串类型,最终编译器会使用字符串的hashCode的方法的值来替换它,最终转化为int类型的switch语句,比如上面的代码,在编译器编译之后,会得到实际逻辑等同于下面这段代码的class字节码。

1public class Main {
2
3    public static void main(String[] args) {
4        String condition = "abc";
5        byte var3 = -1;
6        switch (condition.hashCode()) {
7            case 96354:
8                if (condition.equals("abc")) {
9                    var3 = 0;
10                }
11                break;
12            case 99333:
13                if (condition.equals("def")) {
14                    var3 = 1;
15                }
16        }
17        switch (var3) {
18            case 0:
19                System.out.println("condition is abc");
20                break;
21            case 1:
22                System.out.println("condition is def");
23                break;
24            default:
25                System.out.println("condition isn't abc or edf");
26        }
27
28    }
29}
注意: 这个Java运行环境不支持自定义包名,并且public class name必须是Main

随着Java版本的不断迭代,在Java 13以后,switch语句终于有了比较大的变化,变得更加好用,比如说,可以多个case写在一起,通过->符号可以省略break语句,还可以将switch语句作为表达式使用。下面看看具体的示例。

在Java12中通过设置编译参数–enable-preview也可以实现

注释
1public class Main {
2
3    public static void main(String[] args) {
4        String condition = "abc";
5        switch (condition) {
6            case "abc", "abd" -> System.out.println("condition is abc or abd");
7            case "def"        -> System.out.println("condition is def");
8            default           -> System.out.println("condition isn't abc or edf");
9        }
10        int state = 1;
11        String res = switch(state) {
12            case 0, 1 -> "success";
13            case 2    -> "failure";
14            default   -> "unknown";
15        };
16        System.out.println(res);
17        /**
18         * 如果case语句返回的不是表达式,可以通过yield返回值
19         */
20        state = 2;
21        res = switch(state) {
22            case 0, 1 -> "success";
23            case 2    -> {
24                System.out.println("test");
25                yield "failure";
26            }
27            default   -> "unknown";
28        };
29        System.out.println(res);
30    }
31}
注意: 这个Java运行环境不支持自定义包名,并且public class name必须是Main
switchjava8java