if适合做区间匹配。
switch:
switch适合做值匹配,先执行表达式的值,再把表达式的值与case中的值匹配,如果匹配成功则执行这条case的这段代码,遇到break代码则跳出switch分支语句
package Switch;
public class Switch_Case {
public static void main(String[] args) {
// 需求:用户输入月份可以展示该月份的天数。
// 1、3 、5、 7 、 8、 10、 12月份是 31天
// 2月份是闰年为29天、非闰年为28天。
// 4 、6 、9、 11月份 是30天
int month = 7 ;
switch (month){
case 1:
System.out.println(month+"月是31天!");
break;
case 3:
System.out.println(month+"月是31天!");
break;
case 7:
System.out.println(month+"月是31天!");
break;
}
}
}
如上代码,上面输出的结果都是一样的,这样就造成了代码冗余,正好switch有一个穿透性功能 :如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性。
上面的代码改进后如下:他们输出的结果都是一样的。
package Switch;
public class Switch_Case {
public static void main(String[] args) {
// 需求:用户输入月份可以展示该月份的天数。
// 1、3 、5、 7 、 8、 10、 12月份是 31天
// 2月份是闰年为29天、非闰年为28天。
// 4 、6 、9、 11月份 是30天
int month = 7 ;
switch (month){
case 1:
case 3:
case 7:
System.out.println(month+"月是31天!");
break;
}
}
}
为什么switch不支持double、float、long?
答:比如变量a定义为double的话,那输出的值是0.30000000000....是个不确定的值,那么就无法和switch的表达式相匹配了。float和long同理。
switch的穿透性:
穿透性的作用可以解决代码冗余(代码一样只是执行的数据不同)问题,如下图:把case输出结果都一样的代码去掉
穿透性是因为执行case的时候没有遇到break,所以会一直往下执行直到找到符合条件的case,如果遇到break就跳出分支。