一、Switch语句
import java.util.Calendar; class DaysInMonth { public static void main(String[] args) { Calendar today = Calendar.getInstance(); int month = today.get(Calendar.MONTH); int year = today.get(Calendar.YEAR); int daysInMonth; switch (month) { case Calendar.JANUARY: case Calendar.MARCH: case Calendar.MAY: case Calendar.JULY: case Calendar.AUGUST: case Calendar.OCTOBER: case Calendar.DECEMBER: daysInMonth = 31; break; case Calendar.APRIL: case Calendar.JUNE: case Calendar.SEPTEMBER: case Calendar.NOVEMBER: daysInMonth = 30; break; case Calendar.FEBRUARY: if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0)) { daysInMonth = 29; } else { daysInMonth = 28; } break; default: throw new RuntimeException( "Calendar in JDK does not work"); } System.out.println( "There are " + daysInMonth + " days in this month."); } }
二、Switch表达式
import java.util.Calendar; class DaysInMonth { public static void main(String[] args) { Calendar today = Calendar.getInstance(); int month = today.get(Calendar.MONTH); int year = today.get(Calendar.YEAR); int daysInMonth = switch (month) { case Calendar.JANUARY, Calendar.MARCH, Calendar.MAY, Calendar.JULY, Calendar.AUGUST, Calendar.OCTOBER, Calendar.DECEMBER -> 31; case Calendar.APRIL, Calendar.JUNE, Calendar.SEPTEMBER, Calendar.NOVEMBER -> 30; case Calendar.FEBRUARY -> { if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0)) { yield 29; } else { yield 28; } } default -> throw new RuntimeException( "Calendar in JDK does not work"); }; System.out.println( "There are " + daysInMonth + " days in this month."); } }
三、区别
1、switch 代码块出现在了赋值运算符的右侧;
2、一个 case 语句,可以处理多个情景;
3、新的情景操作符,“->”,它是一个箭头标识符;
4、箭头标识符右侧的数值。这个数值,代表的就是该匹配情景下,switch 表达式的数值。需要注意的是,箭头标识符右侧可以是表达式、代码块或者异常抛出语句,而不能是其他的形式;
5、yield 语句产生的值看成是 switch 表达式的返回值。所以,yield 只能用在 switch 表达式里。