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(JDK) 14 switch表达式使用方法及示例代码
Java JDK13(Java 13) switch新特性语法使用及示例代码