为什么JDK8的switch语法会导致应该执行的代码却没有执行
时间: 2024-03-22 21:36:53 浏览: 13
JDK8的switch语句引入了新的语法,支持使用lambda表达式和方法引用等特性,但这也带来了一些问题。在使用lambda表达式或方法引用的时候,如果在case语句中使用了return或throw语句,那么这些语句并不能像普通的switch语句一样终止程序的执行,而是会跳过后面的代码,直接执行lambda表达式或方法引用中的代码,这可能导致出现应该执行的代码却没有执行的情况。
例如,下面的代码中,当x等于1时,应该执行的代码是在case 1中的,但由于在lambda表达式中出现了return语句,导致后面的代码没有执行。
```
switch (x) {
case 1:
return;
default:
System.out.println("default");
break;
}
```
为了避免这种情况的出现,应该尽量避免在lambda表达式或方法引用中使用return或throw语句,或者使用普通的switch语句来代替lambda表达式或方法引用。
相关问题
jdk1.8switch语法
jdk1.7之前,switch语句只支持整型、字符型和枚举类型,而jdk1.7之后,switch语句支持字符串类型。在jdk1.8中,switch语句还支持lambda表达式,可以使用lambda表达式作为case的值。
例如:
```java
String str = "hello";
switch(str){
case "hello" -> System.out.println("Hello World!");
case "world" -> System.out.println("World Hello!");
default -> System.out.println("Default");
}
```
输出结果为:Hello World!
jdk8 switch
在 JDK 8 中,switch 语句的语法得到了改进,支持更加灵活的用法。
传统的 switch 语句只能使用 int、byte、short、char、enum 作为判断条件,而在 JDK 8 中,switch 语句可以使用字符串作为判断条件。
使用字符串作为判断条件的 switch 语句语法如下:
```
String fruit = "apple";
switch (fruit) {
case "apple":
System.out.println("Selected fruit is apple");
break;
case "banana":
System.out.println("Selected fruit is banana");
break;
case "orange":
System.out.println("Selected fruit is orange");
break;
default:
System.out.println("Selected fruit is not in list");
}
```
此外,JDK 8 中的 switch 语句也支持使用 Lambda 表达式作为 case 表达式,如下所示:
```
int num = 2;
switch(num) {
case 1 -> System.out.println("Selected number is 1");
case 2 -> System.out.println("Selected number is 2");
case 3 -> System.out.println("Selected number is 3");
default -> System.out.println("Selected number is not in list");
}
```
这种写法可以使代码更加简洁和易读。