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