本文主要介绍Java中switch表达式与switch语句使用区别,以及相关示例代码。

1、switch语句

if/else语句不同,switch语句可以有许多可能的执行路径。switch可用于基本类型byte、short、char和int、它们各自的包装类型(byte、short、Character和Integer)、枚举类型和字符串type1。if-else语句用于基于范围的值或条件表达式判断,而switch语句用于仅基于单个值判断。

public class Main {
    public static void main(String[] args) {
        String message = "";
        PaymentStatus paymentStatus = PaymentStatus.PARTPAID;

        switch (paymentStatus) {
        case UNPAID:
            message = "订单还没有付款。请注明最低/全部金额。";
            break;
        case PARTPAID:
            message = "订单的部分款项已付。";
            break;
        case PAID:
            message = "订单已全部付清。";
            break;
        default:
            throw new IllegalStateException("Invalid payment status: " + paymentStatus);
        }
        System.out.println(message);
    }
}
enum PaymentStatus { UNPAID, PARTPAID, PAID, DISPUTED, UNKNOWN; }

注意:JDK 7增加了switch语句对字符串的支持,

2、switch表达式

 switch表达式是在Java SE 12中引入的。然而,它仍然是Java SE 12和13的预览特性,并最终与Java SE 14标准化。与任何表达式一样,switch表达式的计算结果为单个值,并且可以在语句中使用。它还引入了->标签,从而无需使用break语句来防止失败。到Java SE 15为止,所支持的数据类型没有变化(在上面的switch语句部分中提到过)。

使用->实现

 public class Main {
public static void main(String[] args) {
PaymentStatus paymentStatus = PaymentStatus.PARTPAID;
String message = switch (paymentStatus) {
case UNPAID -> "订单还没有付款。请注明最低/全部金额。";
case PARTPAID -> "订单的部分款项已付。";
case PAID -> "订单已全部付清。";
default -> throw new IllegalStateException("Invalid payment status: " + paymentStatus);
};
System.out.println(message);
}
}
enum PaymentStatus { UNPAID, PARTPAID, PAID, DISPUTED, UNKNOWN; }

使用yield实现

注意:从Java SE 13开始,可以使用yield语句,而不是箭头操作符(->),从switch表达式返回一个值。

 public class Main {
public static void main(String[] args) {
PaymentStatus paymentStatus = PaymentStatus.PARTPAID;
String message = switch (paymentStatus) {
case UNPAID:
yield "订单还没有付款。请注明最低/全部金额。";
case PARTPAID:
yield "订单的部分款项已付。";
case PAID:
yield "订单已全部付清。";
default:
throw new IllegalStateException("Invalid payment status: " + paymentStatus);
};
System.out.println(message);
}
}
enum PaymentStatus { UNPAID, PARTPAID, PAID, DISPUTED, UNKNOWN; }

3、switch语句与switch表达式区别

从上面介绍及示例,可以看出switch语句与switch表达式主要区别是写法不同switch表达式可以使用箭头操作符(->),或者也可以使用 yield。并且可以省略break关键字,写法更简洁。另外使用较老版本的JDK,switch表达式也是不支持的。switch表达式最终是返回一个值为最终结果,而switch语句不能返回值,必须在每个case中进行处理。

相关文档

Java switch case 语句

Java(JDK) 14 switch表达式使用方法及示例代码

Java JDK13(Java 13) switch新特性语法使用及示例代码

Java中switch用法示例


推荐文档