前面内容介绍了条件结构,并通过示例探讨了该结构的各种不同用法。Java语言还提供了一种称为“条件运算符”的特殊运算符,它可以用于条件表达式,以提供与if-else等同的结构。此运算符是?和:符号的组合,它是一个三目运算符,即具有三个参与运算的操作数,其语法规则如下:
布尔表达式 ? 表达式1 :表达式2
其中,布尔表达式返回一个逻辑值,其值可以为真,也可以为假。如果布尔表达式的值为真,则以表达式1的值作为整个条件表达式的值。否则,以表达式2的值作为整个条件表达式的值。条件表达式通常用于赋值语句中。其工作原理可以用图片形式进行描述,如下图所示。
条件运算符的工作原理
例如,要找出两个数字中的最大值,可以编写:
max = num1 > num2 ? num1:num2;
可以看出,条件运算符需要三个操作数,一个是需要被赋值的操作数,另外两个是参与比较运算的操作数。该语句首先检查表达式num1>num2,判断其值是真还是假。如果此表达式的值为真,即num1>num2,则将num1赋值给max,否则,将num2的值赋值给max。
此运算符等同于如下的if-else结构
if(exprt1)
{
exprt2;
}
else
{
exprt3;
}上述求较大值的示例等同于:
if(num1>num2) max = num1; else max=num2;
如果在条件语句中,只执行单个的赋值语句时,则可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。
现在举个完整示例,说明条件运算符的用法。
案例1:编写一个程序,要求用户输入基本工资,计算税后工资。个人所得税收取规定:工资大于3500元的部分将扣除个人所得税。小于3500元的部分不扣除个人所得税。
在PbaseUnit10项目unit包下创建TaxSample类。代码如下:
/**
* @Title: TaxSample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.util.Scanner;
/**
* @ClassName: TaxSample
* @Description: 流程控制(条件运算符)案例1
* @author 编程训练营
* @date
*
*/
public class TaxSample {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
double sal;
double rate;
Scanner sc = new Scanner(System.in);
System.out.println("请输入基本工资:");
// 接收用户输入的基本工资
sal = sc.nextDouble();
rate = (sal < 3500) ? 0 : 0.05;
// 计算税后工资
sal = sal - (sal - 3500) * rate;
System.out.printf("\n 税后工资为:%7.2f \n", sal);
}
}程序结构分析
程序功能主要是演示条件运算符的使用。
语句“rate = ( sal < 3500 ) ? 0 : 0.05;”,用于判断税率,首先检查表达式sal < 3500,如果输入的工资大于3500,则将0.05的税率赋值给rate,否则,将0税率赋值给rate。
程序执行结果如下图所示:

条件运算符为三目运算符,其中,? 前面的语句为判断条件,?后面的语句用 : 隔开,为两个执行语句,如果 ?前面的条件为真,则执行?后面中 : 前面的语句,如果 ?前面的条件为假,则执行 : 后面的语句。