Java 中的 switch 语句详解-与if~else的区别
Java 中的 switch
语句是一种条件语句,它允许你基于不同的情况执行不同的代码块。switch
语句通常用于替代多个 if-else
语句,使代码更加清晰和易于维护。
基本语法
switch (expression) {
case value1:
// 代码块1
break;
case value2:
// 代码块2
break;
// ...
default:
// 默认情况下执行的代码块
break;
}
用法说明
- expression:
switch
语句中的表达式可以是任何整型(byte
,short
,char
,int
)或者枚举类型(从Java 7开始)。 - case:每个
case
后面跟着一个值,这个值必须与expression
的类型兼容。如果expression
的值与case
后面的值相等,就会执行该case
下的代码块。 - break:
break
语句用于终止switch
语句,防止执行流程继续向下流入其他case
代码块。如果没有break
,程序将执行当前case
之后的所有case
代码块,直到遇到break
或switch
结束。 - default:
default
代码块是可选的,如果没有任何一个case
匹配,就会执行default
代码块。
示例
假设我们有一个程序,根据用户输入的月份数字,输出月份的名称。
public class MonthNameSwitch {
public static void main(String[] args) {
int monthNumber = 3; // 假设用户输入的是3
switch (monthNumber) {
case 1:
System.out.println("January");
break;
case 2:
System.out.println("February");
break;
case 3:
System.out.println("March");
break;
case 4:
System.out.println("April");
break;
// ... 其他月份
default:
System.out.println("Invalid month number");
break;
}
}
}
在这个示例中,如果 monthNumber
的值是 3
,程序将输出 "March"。
注意事项
- 从Java 12开始,
switch
表达式可以返回值,这意味着你可以使用switch
表达式作为方法调用的返回值。 - 每个
case
后面必须有break
或者return
语句,否则会导致代码逻辑错误。 switch
语句中的expression
必须是整型或者枚举类型,不能是浮点型或字符串。如果需要对字符串进行switch
判断,可以使用多个if-else
语句。
区别之处
在 Java 中,传统的 switch
语句不支持条件语句或范围检查。每个 case
后面必须是一个常量表达式,不能是一个条件表达式或范围。这意味着你不能直接在 case
后面写 x > 10
或者类似的表达式。
然而,如果你需要根据范围来执行不同的代码块,你可以使用多个 case
来覆盖不同的范围,或者使用 if-else
语句来实现。以下是一些处理这种情况的方法:
使用多个 case 覆盖范围
如果你有一个连续的数字范围,你可以为这个范围内的每个数字都写一个 case
。
int number = 15;
switch (number) {
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
System.out.println("Number is between 10 and 15");
break;
// 其他 case
}
使用 if-else 语句
如果你的范围不是连续的,或者你想要更灵活的条件检查,使用 if-else
语句可能是更好的选择。
int number = 15;
if (number > 10) {
System.out.println("Number is greater than 10");
} else {
System.out.println("Number is 10 or less");
}
Java 12 引入的 Switch 表达式
从 Java 12 开始,引入了 Switch 表达式(有时被称为 Switch 语句的升级版),它允许更复杂的模式匹配和箭头语法,但即便如此,它也不支持直接在 case
后面使用条件表达式。Switch 表达式主要用于模式匹配,例如与 instanceof
结合使用。
Object obj = "Hello";
int result = switch (obj) {
case String s -> s.length();
default -> -1;
};
在这个例子中,switch
表达式使用了模式匹配,但仍然不支持像 case x > 10
这样的条件表达式。
总的来说,如果你需要基于条件或范围来执行不同的代码块,if-else
语句
转载自:https://juejin.cn/post/7401112990442389538