5分钟课堂:Java中的switch表达式 java语言switch用法举例

JDK 14发布版本正式支持switch表达式。具体包括:在switch语句中使用箭头标号语法;case 条件,多个可以写在一行,用逗号分开;可以省略 break 关键字;switch可以作为表达式直接返回一个值。具体标准参见https://openjdk.java.net/jeps/361。

例如,下面定义的方法rangeOf ( )中,switch语句中使用了箭头标签(Arrow Labels),case 条件中使用多个字面常量,并且省略了break语句:

static void rangeOf(int k) {
  switch (k) {
      case 1,2,3 -> System.out.println("Ranking one");
      case 4,5,6,7,8,9 -> System.out.println("Ranking two");
      default -> System.out.println("Not Ranked");
    }
}

连续使用如下的方法方法调用:

rangeOf (1);
rangeOf (19);
rangeOf (8);

会得到如下的输出结果:

Ranking one
Not Ranked
Ranking two

switch语句扩展成为switch表达式的基本语法为:

<目标类型> result = switch (<参数>) {
    case Label1 -> <表达式1>;
    case Label2 -> <表达式2>;
    ……
    default -> <表达式n>;
};

如果<目标类型>确定,整个switch表达式的类型就是目标类型;如果<目标类型>不确定,那么 switch 表达式类型就是各 case 分支的表达式计算出来的独立类型。

大多数情况下 case 标号箭头("case Label ->")后面是单个表达式,对于后面由多条语句构成的语句块,可以在最后使用 yield 语句来返回 switch 表达式值。例如:

int j = switch (s) {
    case "BJTU" -> 1;
    case "SSE" -> 2;
    default -> {
        System.out.println("Neither BJTU nor SSE, hmmm...");
        yield 0;
    }
};

yield语句也可以用于传统的case 标号("case Label :")下,返回一个值并结束switch表达式。例如:

int result = switch (s) {
    case "BJTU":
   		 yield 1;
    case "SSE":
    		yield 2;
    default:
        System.out.println("Neither BJTU nor SSE, hmmm...");
        yield 0;
};
原文链接:,转发请注明来源!