三元运算符 基本语法: 条件表达式?表达式1:表达式2; 运算规则: 1)如果条件表达式为true,运算后的结果是表达式1; 2)如果条件表达式为false,运算后的结果是表达式2;
package cn.javageiyegun.demo03;
public class TernaryOperator {
public static void main(String[] args) {
int a = 10;
int b = 99;
//解读
//1.a > b 为 false
//2.返回 b--,先返回 b的值,然后在 b-1;
//3.返回的结果是99;
int result = a > b ? a++ : b--; //99
System.out.println("result = " + result);
int c = 10;
int d = 99;
int result1 = c > d ? c++ : --d; //98
System.out.println("result1 = " + result1);
int e = 10;
int f = 99;
int result2 = e < f ? e++ : f--;
System.out.println("result2 = " + result2 ); //10
System.out.println("e = " + e); //11
System.out.println("f = " + f); //99
}
}
细节: 1)表达式1和表达式2 要为可以赋给接受变量的类型(或可以自动转换/强制转换) 2)三元运算符可以转成if--else语句 int res = a > b? a++ : --b; if(a > b){ res = a++; }else{ res = --b; }
package cn.javageiyegun.demo03;
public class TernaryOperatorDetail {
public static void main(String[] args) {
//1)表达式1和表达式2 要为可以赋给接受变量的类型(或可以自动转换/强制转换)
int a = 3;
int b = 8;
int c = a > b ? (int)1.1 : (int)3.4; //可以的,强制类型转换
double d = a > b ? a : b + 3; //可以的,自动类型转换
//int f = a > b ? 1.1 : 2.2; //报错,double 8个字节的物体放不进 int 4个字节的空间里面
}
}
练习
package cn.javageiyegun.demo03;
public class TernaryOperatorExercise {
public static void main(String[] args) {
//案例:求三个数的最大值
int a = 55;
int b = 33;
int c = 123;
//思路分析
//1.先得到a 和 b 中的最大数 , 保存到max1;
//2.然后再求出 max1 和 c中的最大数,保存到max2;
int max1 = a > b ? a : b;
int max2 = max1 > c ? max1 : c;
System.out.println("最大数 = " + max2);
//一条语句
int max3 = (a > b ? a : b) > c ? (a > b ? a : b) : c;
System.out.println("最大数 = " + max3);
}
}