运算符--三目运算符
三目运算符:
格式
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
执行流程:
- 首先判断关系表达式中的结果,
- 如果说判断关系表达式的结果为true,执行冒号前面的表达式1
- 如果说判断关系表达式的结果为false,执行冒号后面的表达式2
注意事项:
- 关系表达式的小括号不能省略
- 如果后面的表达式只是一个值或者一个变量,小括号可以省略
- 如果后面的表达式需要进行一些运算,小括号不能省略 。(关系表达式)?(表达式1):(表达式2);
程序示例
public class OptSanMuDemo {
public static void main(String[] args) {
boolean b = (1>3)?(true):(false);
System.out.println(b); // 1<3,所以表达式1>3false,输出后面的false。
int x = 10;
int i = (x++ == 11)?(x++):x;
System.out.println(i); // 10!=11 所以false ,输出x=10
System.out.println(x); //输出x=11(自增1)
int x1 = 13;
//三目运算表达式的结果数据类型由表达式中最高的数据类型接收
double i2 = (x1++ == 12)?x1:((x1*1.0)/2);
System.out.println(i2);
System.out.println(x1);
}
}
例题
需求1:获取两个数中较大的数据
需求2:获取三个数中较大的数
需求3:比较两个整数是否相同
public class OptTest1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 40;
//三目运算符 需求1
int result = (a > b) ? a : b;
System.out.println(result);
//三目运算符 需求2
int max = (result > c) ? result : c;
System.out.println("三个数中最大值为:" + max);
int x = 11;
int y = 12;
//三目运算符 需求3
boolean res2 = (x == y) ? true : false;
System.out.println("x与y进行比较:" + res2);
}
}
思考题:
以下结果是如何产生的?
//自增与三目运算符
public class SanMuTest {
public static void main(String[] args) {
int x = 10 ;
int y = 10 ;
int z = 10 ;
int i = (x++ == 10) ? y++ : z;
System.out.println(x); //11
System.out.println(y); //11
System.out.println(z); //10
System.out.println(i); //10
}
}
/*
执行流程:
首先将x的值与10进行比较,结果为true,然后 x++ ➡ x=11
又因为三目运算符的表达式结果为true的时候执行 :左边的表达式1。
所以 int i = (x++ == 10) ? y++ : z ; ➡➡ int i = y++ ;
自增在后,先赋值后自增。所以 i=10 ,y=11 ;z没有变化。
*/