运算符--三目运算符

三目运算符:

格式

(关系表达式)?表达式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没有变化。
*/
posted @ 2021-11-27 18:52  赤兔胭脂小吕布  阅读(292)  评论(0编辑  收藏  举报