switch case的进化历程🚐
- 简介
- 区别
- Java 6及以下 | 整数当道
- Java 7 | String来贺
- Java 8 | 常量不够, 表达式来凑
- Java 12 | ->替: yield能返回
- Java 14 | ->凑多值,转型在心中
- 转型
- Java 15 | 哎呦喂,都能定义变量了
- Java 17 | 整数不够, 长整型来凑
- 总结
因为长情是古董,所以假货特别多
觉得太长可以直接看总结就可以了
简介
Switch case语句在Java中是一种流程控制结构,用于将一个值与一系列可能的情况进行比较,并根据匹配的情况执行相应的代码块。在不同的Java版本中,switch case标签的用法略有不同。
区别
Java 6及以下 | 整数当道
以下是一些Java版本中的区别:
- Java 6及以下版本:在Java 6及以下版本中,switch case标签只支持整数、枚举类型和字符类型。以下是一个使用整数类型标签的示例代码:
int num = 2;
switch (num) {case 1:System.out.println("Number is one");break;case 2:System.out.println("Number is two");break;case 3:System.out.println("Number is three");break;default:System.out.println("Number is not between 1 and 3");
}
Java 7 | String来贺
- Java 7版本:在Java 7版本中,switch case标签支持字符串类型。以下是一个使用字符串类型标签的示例代码:
String fruit = "apple";
switch (fruit) {case "apple":System.out.println("The fruit is an apple");break;case "banana":System.out.println("The fruit is a banana");break;case "orange":System.out.println("The fruit is an orange");break;default:System.out.println("The fruit is unknown");
}
Java 8 | 常量不够, 表达式来凑
- Java 8及以上版本:在Java 8及以上版本中,switch case标签支持使用表达式作为标签。以下是一个使用表达式类型标签的示例代码:
final int MONDAY = 1;
final int TUESDAY = 2;
final int WEDNESDAY = 3;
final int THURSDAY = 4;
final int FRIDAY = 5;
final int SATURDAY = 6;
final int SUNDAY = 7;
int dayOfWeek = 5;
switch (dayOfWeek) {case MONDAY:case TUESDAY:case WEDNESDAY:case THURSDAY:case FRIDAY:System.out.println("Today is a weekday");break;case SATURDAY:case SUNDAY:System.out.println("Today is a weekend day");break;default:System.out.println("Invalid day of week");
}
在这个示例中,我们使用了final变量作为标签,并且在一个case语句中匹配了多个标签。
Java 12 | ->替: yield能返回
- Java 12及以上版本:在Java 12及以上版本中,switch case标签引入了新的语法:使用箭头操作符(->)代替冒号(:)来连接标签和代码块。同时,还引入了新的关键字yield,用于在switch表达式中返回值。以下是一个使用箭头操作符和yield的示例代码:
String fruit = "apple";
String result = switch (fruit) {case "apple" -> {yield "The fruit is an apple";}case "banana" -> {yield "The fruit is a banana";}case "orange" -> {yield "The fruit is an orange";}default -> {yield "The fruit is unknown";}
};
System.out.println(result);
在这个示例中,我们使用了switch表达式来获取一个返回值,并在每个case语句中使用箭头操作符和yield来指定返回值。
Java 14 | ->凑多值,转型在心中
- Java 14及以上版本:在Java 14及以上版本中,switch case标签引入了新的语法:使用“->”箭头操作符来连接多个标签。以下是一个使用箭头操作符连接多个标签的示例代码:
int num = 2;
switch (num) {case 1, 2, 3 -> System.out.println("The number is between 1 and 3");case 4, 5, 6 -> System.out.println("The number is between 4 and 6");default -> System.out.println("The number is not between 1 and 6");
}
在这个示例中,我们使用了箭头操作符来连接多个标签,使代码更加简洁。
转型
从Java 14版本开始,switch case标签可以用于转型(casting)。这个功能被称为“Switch Expressions with Enhanced Pattern Matching”,可以让我们在使用switch case语句时,同时进行类型检查和类型转换,从而简化代码。以下是一个使用switch case标签进行转型的示例代码:
Object obj = "Hello, World!";
if (obj instanceof String str && str.length() > 0) {int result = switch (str.charAt(0)) {case 'H', 'h' -> 1;case 'W', 'w' -> 2;case '!' -> 3;default -> 0;};System.out.println("Result: " + result);
}
在这个示例中,我们首先使用instanceof运算符进行类型检查,并将变量obj转换为字符串类型。然后,在switch表达式中,我们使用了模式匹配来检查字符串的第一个字符,并将其转换为int类型的结果。在case标签中,我们可以同时使用多个模式,从而简化代码并提高可读性。
需要注意的是,在进行转型时,我们必须使用模式变量来进行类型检查和类型转换,否则会出现编译错误。另外,需要确保使用的Java版本支持“Switch Expressions with Enhanced Pattern Matching”这个功能。
另一个使用switch case标签进行转型的例子:
Object obj = 123;
String result = switch (obj) {case Integer i -> "The object is an integer with value " + i;case Long l -> "The object is a long with value " + l;case String s -> "The object is a string with value " + s;case Double d -> "The object is a double with value " + d;default -> "The object is of unknown type";
};
System.out.println(result);
在这个示例中,我们首先将一个Object类型的变量obj赋值为一个整数类型的值123。然后,我们使用switch表达式来检查变量obj的类型,并将其转换为不同的类型。在每个case标签中,我们使用模式变量来进行类型检查和类型转换,并构造一个字符串结果。如果没有匹配的标签,我们使用默认标签来返回一个未知类型的字符串结果。
Java 15 | 哎呦喂,都能定义变量了
- Java 15及以上版本:在Java 15及以上版本中,switch case标签引入了新的语法:使用“->”箭头操作符来将标签与代码块分开。这个新的语法使得我们可以在一个case标签中定义变量并将其作为代码块的一部分。以下是一个使用箭头操作符和新语法定义变量的示例代码:
int num = 2;
switch (num) {case 1 -> {String message = "The number is one";System.out.println(message);}case 2 -> {String message = "The number is two";System.out.println(message);}case 3 -> {String message = "The number is three";System.out.println(message);}default -> {String message = "The number is not between 1 and 3";System.out.println(message);}
}
在这个示例中,我们在每个case标签中定义了一个字符串变量message,并在代码块中使用这个变量输出消息。
Java 17 | 整数不够, 长整型来凑
- Java 17及以上版本:在Java 17及以上版本中,switch case标签引入了新的语法:使用“case L ->”来指定长整型标签。以下是一个使用长整型标签的示例代码:
long num = 123456789;
switch (num) {case 123456789L -> System.out.println("The number is 123456789");case 987654321L -> System.out.println("The number is 987654321");default -> System.out.println("The number is not known");
}
在这个示例中,我们使用长整型标签来匹配长整型变量num。
总之,随着Java版本的不断升级,switch case标签的用法也在不断发展。我们需要了解这些新的语法和功能,以便更好地使用这个语言结构。同时,我们也可以利用这些新的功能来编写更加简洁和易读的代码。
总结
Java中的switch case语句可以用于多个分支条件的判断,同时也可以用于类型检查和类型转换。在不同的Java版本中,switch case语句的用法也有所不同:
-
Java 6及以下版本:在Java 6及以下版本中,switch case语句只能用于整数类型的判断,不能用于字符串类型和其他数据类型的判断。
-
Java 7版本:在Java 7版本中,switch case语句引入了新的语法:使用字符串类型的值作为case标签。
-
Java 12版本:在Java 12版本中,switch case语句引入了新的语法:使用“yield”关键字来返回结果。
-
Java 14版本:在Java 14版本中,switch case语句引入了新的语法:使用“->”箭头操作符来将标签与代码块分开,并且可以使用模式变量来进行类型检查和类型转换。这个新的语法被称为“Switch Expressions with Enhanced Pattern Matching”。
-
Java 15及以上版本:在Java 15及以上版本中,switch case标签引入了新的语法:使用“->”箭头操作符来将标签与代码块分开,并且可以在一个case标签中定义变量并将其作为代码块的一部分。
-
Java 17及以上版本:在Java 17及以上版本中,switch case标签引入了新的语法:使用“case L ->”来指定长整型标签。
在Java中,模式变量被用于增强模式匹配的功能,在if语句和Switch Expressions with Enhanced Pattern Matching中都有应用。使用模式变量可以让我们更加方便地进行类型检查和类型转换,并且可以直接在if语句或switch case标签的作用域内使用相关的类型操作,从而简化代码,提高可读性和可维护性。
总之,Java中的switch case语句和模式变量是非常有用的语言特性,它们可以让我们更加方便地进行多个分支条件的判断和类型检查和类型转换,并且可以让我们的代码更加简洁和易读。随着Java版本的不断升级,我们需要了解这些新的语法和功能,以便更好地使用这个语言结构。