概述 自java7以来,java中的Switch语句经历了快速的演变。因此,在本文中,我们将举例讨论switch语句从java7到java17的演变或变化。 让我们从初始java7开始Java7:Switch语句 在Java7之前,Switch语句的判断条件只能接受int,byte,char,short类型的参数,这是很长一段时间以来的标准:intvalue5;switch(value){case1:System。out。println(One);case5:System。out。println(five);default:System。out。println(Unknown);}Java8:Switch语句 在Java8中,case值和switch语句开始演化时引入了字符串和枚举字符串SwitchCase语句举例:StringdayTswitch(day){caseMonday:System。out。println(Weekday);caseTuesday:System。out。println(Weekday);caseWednesday:System。out。println(Weekday);caseThursday:System。out。println(Weekday);caseFriday:System。out。println(Weekday);caseSaturday:System。out。println(Weekend);caseSunday:System。out。println(Weekend);default:System。out。println(Unknown);}枚举SwitchCase语句举例:enumDAYS{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY}DAYSdaysDAYS。SUNDAY;switch(days){caseMONDAY:System。out。println(Weekdays);caseTUESDAY:System。out。println(Weekdays);caseWEDNESDAY:System。out。println(Weekdays);caseTHURSDAY:System。out。println(Weekdays);caseFRIDAY:System。out。println(Weekdays);caseSATURDAY:System。out。println(Weekends);caseSUNDAY:System。out。println(Weekends);default:System。out。println(Unknown);}Java12:Switch语句 Java12进一步增强了switch语句,并引入了switch表达式作为预览特性。 它引入了一系列新功能:当switch语句变成了switch表达式时,您可以从一个switch块中返回case中可以有多个值您可以通过箭头操作符或break关键字从switch表达式返回值,通过break关键字返回值returnswitch(day){caseMonday:breakWcaseTuesday:breakWcaseWednesday:breakWcaseThursday:breakWcaseFriday:breakWcaseSaturday:breakWcaseSunday:breakWdefault:breakU};break关键字返回结果值 这个词后来在Java13中被关键字yield取代。returnswitch(day){caseMonday:yieldWcaseTuesday:yieldWcaseWednesday:yieldWcaseThursday:yieldWcaseFriday:yieldWcaseSaturday:yieldWcaseSunday:yieldWdefault:yieldU};通过箭头操作符返回值 此外,Java12引入了箭头操作符作为简单的替代,而不是使用break关键字返回值:returnswitch(day){caseMondayWcaseTuesdayWcaseWednesdayWcaseThursdayWcaseFridayWcaseSaturdayWcaseSundayWdefaultU};多个case标签 同样,Java12也可以在一个case语句中提供多个case值,所以如果你观察上面的例子,因为有5个case在这里期望相同的值,所以我可以合并或合并多个case值为一个,如下所示returnswitch(day){caseMonday,Tuesday,Wednesday,Thursday,FridayWcaseSaturday,SundayWdefaultU};Java14:Switch语句的改变 我们在java12和13中讨论过的任何switch语句和特性,都是预览特性,需要将flagenablepreview设置为true。但是Java14让所有的特性都不再是预览特性。标志enablepreview在java14启动时不需要设置。并且switch语句已经演变成switch表达式! Java17:Switch语句表达式: JDK17已经发布,这是一个LTS(longtermsupport)版本,下一代的SpringFramework6和SpringBoot3(2022下半年发布),也将基于JDK17。由此可以推测,JDK17可能会和JDK8一样,也成为未来Java项目使用的主力版本。 所以,现在才开始学Java的,可以直接学用JDK17。如果使用老版本学习资料进行学习,至少从JDK8开始,而JDK8之前的书,基本上都可以送废品收购站了。 开关表达特性模式匹配Gaurded模式nullcase模式匹配 它引入了一种新的开关特性,即模式匹配。您可以匹配case标签中的模式。换句话说,你可以在switch条件下传递对象,这个对象可以在switchcase标签中检查不同类型。returnswitch(obj){caseIntegeriIcaseStringsIcaseEmployeesItisaEdefaultI}; 在上面的例子中,我将一个对象传递给switch条件。这在Java17之前是不可能的。然后可以检查该对象是否具有特定的数据类型,并将其赋值给一个变量。 例如,考虑以下情况:caseIntegeriI 传递的对象被检查类型为Integer,然后赋值给变量i,如果它是一个整数。通过箭头操作符返回字符串Itisaninteger。Gaurded模式 让我们以这个用例为例。 在我检查了Employee实例的case标签内,我想做一个额外的检查。 传统上,你可以在案例陈述之后做这个。 是这样的:caseEmployeeemp:if(emp。getDept()。equals(IT)){yieldThisisITE} switch预览版扩展了Java中的模式语言,允许switch针对多个模式测试表达式和语句,每个模式都有特定的操作。Java17已经引入guarded模式,允许模式匹配逻辑用任意布尔表达式。您可以在case标签本身中进行检查,如下所示:returnswitch(obj){caseIntegeriIcaseStringsIcaseEmployeeemployeeemployee。getDept()。equals(IT)ITEdefaultI};NullCase 在Java17之前,你不可能在不抛出空指针异常的情况下将空值传递给switch语句。 Java17允许您这样处理它: casenull它是一个空对象; 这就是从java7到java17的转换过程。 希望你喜欢这篇文章,点赞并且关注,学习更多java以及大数据优质知识。