if和switch分支
一、if分支
1.1 简单if分支
知识点:if分支 之 简单的if 语法结构: if(表达式){ ...代码块... } 理解:表达式的结果必须是boolean类型 true - 执行代码块 false- 跳过if分支,执行if以外的代码 public static void main(String[] args){ if(false){ System.out.println("...代码块..."); } System.out.println("if以外的代码"); }
1.2 复杂if分支
案例一: 人类的健康值在20-25的数值内为健康 (健康值算法为:体重(Kg) / 身高(米)的平方) public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入体重(Kg):"); double weight = scan.nextDouble(); System.out.println("请输入身高(M):"); double height = scan.nextDouble(); double health = weight/(height*height); if(health>20 && health<25){ System.out.println("小护士说:\"健康,保持现有状态\""); } }
1.3 if...else...
语法结构: if(表达式){ ...代码块... }else{ ...else代码块... } 理解: 表达式的结果必须是boolean类型 true - 执行代码块 false- 执行else代码块
public static void main(String[] args){ if(false){ System.out.println("...代码块..."); }else{ System.out.println("...else代码块..."); } System.out.println("if分支以外的代码块"); }小结:if...else...二选一的情况下使用
1.4 多重if分支
语法结构:
if(表达式1){ if(表达式4){ ...代码块4... } }else if(表达式2){ ...代码块2... }else if(表达式n){ ...代码块n... }else{ ...else代码块... }
理解: 从上往下判断表达式,哪个表达式先为true,就执行对应的代码块,如果都不为true就执行else代码块 表达式的结果必须是boolean类型 true - 执行代码块 false- 执行else代码块 注意:else代码块根据需求可写可不写,多重if分支在多选一的情况下使用
小结:if可以无限层嵌套 经验:嵌套最好不要超过3层,嵌套越多可读性越差
二、switch分支
语法结构: switch(表达式){ case 值1: ...代码块1... break; case 值2: ...代码块2... break; case 值n: ...代码块n... break; default: ...default代码块... break; }理解: 表达式的结果分别给值1、值2、值n比较,哪个相同就执行对应的代码块 如果都不相同就执行default代码块 default代码块根据需求可写可不写 break表示跳出当前分支语句
小结:switch是比较表达式的结果和case后面的值是否相同
面试题: case的值可以相同吗? 不允许相同
面试题: default可以省略吗? 可以省略(相当于多重if里的else{}) break可以省略吗? 可以 default的位置一定要在最后吗? 不一定,但是为了可读性最好放在最后 表达式值的类型可以是什么? byte、short、int、char、String(JDK1.8)、枚举(JDK1.5) 表达式值为什么只支持byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)? switch底层只识别int值 byte --> int 自动转型 short -> int 自动转型 int --> int 直接使用 char --> int 获取字符的码值 String-> int 获取字符串的hash码(获取字符串中多个字符的码值 + 散列算法,算出来的结果就是hash值) 枚举 --> int 获取枚举对象的编号
三、if和switch的区别
表达式的区别: if:boolean类型 switch:byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)
应用场景的区别: if:判断区间、判断复杂条件 switch:判断单个值是否相同