Java语言提供了两种基本的分支选择语句:if/else if/else语句和switch/case/default语句。本篇博文将对上述语句的使用方法进行详细的描述。
if/else if/else的选择性搭配使用,可以形成以下常见的三种选择结构:
1.双分支结构。由if/else构成,来判断一个条件(布尔表达式),当条件为(true)时执行一个操作,当条件为假(false)时执行另一个操作。
2.单分支选择结构。由省略了else的if语句构成,在条件为真时执行一个操作,在条件为假时则跳过该操作。
3.多分支选择结构。由if和一个或多个else if 语句构成,根据表达式的取值范围或是具体的值来决定执行许多不同的操作中的某一个操作。当然,使用switch语句也可以实现多分支选择结构,这个我们留到博文后半部分进行详细的讲解。
if语句的基本形式如下:
if (布尔表达式){
语句块1
}
else{
语句块2
}
其执行流程如图所示:
说明:
1.这里的“布尔表达式”为关系表达式或逻辑表达式(下同)。
2.”语句块“是指一条或多条语句。当为多条语句时,一定要用”{“和”}“将多条语句括起来,使多条语句成为一个整体。
示例:
//双分支选择结构
if(a > b){
System.out.println("a > b == true");
}else{
System.out.println("a > b == false");
}
在if语句中,可以省略else子句形成单分支结构。其形式如下:
if(布尔表达式)语句块
其执行流程如图所示:
示例:
//单分支选择结构
if(a > b){
System.out.println("a > b == true");
}
在实际问题中,往往并不是一个简单的条件就可以决定执行某些操作,而是需要由若干个条件来决定执行若干个不同的操作。Java语言对于这一类问题提供了多种处理方法。这里主要讨论if/else if/else语句。
其形式如下:
if(布尔表达式1) 语句块1
else if(布尔表达式2) 语句块2
else if(布尔表达式3) 语句块3
…
else if(布尔表达式n) 语句块n
else 语句块n+1
其执行流程图如下:
示例:
//多分支选择结构,当有更多的条件语句时,可以按需增加else if语句判别的个数。
if(a > b){
System.out.println("a > b == true");
}else if(a == b){
System.out.println("a > b == false");
}else{
System.out.println("a > b == false");
}
注意:Java编译器将else与离它最近的if(当然,指的是else语句前面的if)组合在一起,除非用”{ }“才能指定不同的匹配方式。
当面临从多个分支中选择一个分支去执行的问题时,虽然上述的if/else if/else语句也可以解决,但当判断条件较多时,程序的可读性将大大降低。Java中提供switch语句可清楚的处理多分枝选择问题。switch语句根据表达式的值来执行多个操作中的一个,其格式如下:
switch(表达式)
{ case 值1:语句块1;break; //分支1
case 值2:语句块2;break; //分支2
…
case 值n:语句块n;break; //分支n
[ default : 语句块 n + 1; ]
}
switch语句的执行流程如图所示:
说明:
1.switch后面表达式的结果类型可以是byte,char,short,int和枚举类型,JDK7以后,可以使用String类型,case后的值是与表达式类型相同的常量。
2.case后的值不允许重复。
3.如果某个case分支如果没有提供break语句,该case语句执行完后则会继续执行下一个case后的语句。
4.当表达式的值与任一case子句中的值都不匹配时,将执行default后面的语句;如果没有default子句,则程序直接跳出switch语句。
示例:
switch(a - b){
case 1:System.out.println("a - b = 1");
break;
case 2:System.out.println("a - b = 2");
break;
case 3:System.out.println("a - b = 3");
break;
case 4:System.out.println("a - b = 4");
break;
default:System.out.println("Illegal expression");
}
注: 如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可 以使用,建议使用swtich语句。因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
对于一些简单的if/else语句,可用条件运算符来替代。例如,若有以下if语句:
if(x > y){
maxNum = x;
}else{
maxNum = y;
}
//该if语句则等效于下面的条件判断语句
maxNum = (x > y)?x:y
其中“?:”被称为条件运算符:“(x > y)?x:y”被成为条件表达式。条件表达式的语义是:若(x>y)条件为true,则表达式的值取x的值,否则表达式的值取y的值。条件表达式的一般形式为:
布尔表达式?表达式1:表达式2;
在条件表达式中:
1.表达式1和表达式2的类型必须相同。
2.条件运算符的执行顺序是:先求解布尔表达式,若值为true则执行表达式1,此时表达式1的值将作为整个条件表达式的值;否则求解表达式2,此时表达式3的值将作为整个条件表达式的值。
x的值,否则表达式的值取y的值。条件表达式的一般形式为:
布尔表达式?表达式1:表达式2;
在条件表达式中:
1.表达式1和表达式2的类型必须相同。
2.条件运算符的执行顺序是:先求解布尔表达式,若值为true则执行表达式1,此时表达式1的值将作为整个条件表达式的值;否则求解表达式2,此时表达式3的值将作为整个条件表达式的值。
在实际应用中,常常将条件运算符与赋值运算符结合起来,构成赋值表达式,以替代比较简单的if/else语句。条件运算符的优先级高于赋值运算符,其结合方向为“自左至右”。