条件运算符
条件运算符是唯一的三元运算符。
条件运算符语法
基本格式
Java
条件 ? 表达式1 : 表达式2
// 条件为true:返回表达式1
// 条件为false:返回表达式2
基本示例
Java
int a = 10, b = 20;
// 取最大值
int max = a > b ? a : b; // 20
// 取最小值
int min = a < b ? a : b; // 10
条件运算符用法
判断取值
Java
int score = 85;
// 判断是否及格
String result = score >= 60 ? "及格" : "不及格";
// result = "及格"
// 判断奇偶
int n = 7;
String type = n % 2 == 0 ? "偶数" : "奇数";
// type = "奇数"
计算取值
Java
int a = -5;
// 取绝对值
int abs = a > 0 ? a : -a; // 5
// 两数较大值
int max = a > b ? a : b;
// 两数较小值
int min = a < b ? a : b;
返回对象
Java
int score = 85;
// 返回不同对象
Grade grade = score >= 90 ? new ExcellentGrade() : new NormalGrade();
// 返回null
String value = isValid ? getName() : null;
嵌套条件运算符
Java
int score = 85;
// 嵌套使用(可读性降低,不推荐复杂嵌套)
String level = score >= 90 ? "优秀" :
score >= 60 ? "合格" : "不合格";
// level = "合格"
// 建议使用if-else替代复杂嵌套
条件运算符与if-else对比
等价关系
Java
// 条件运算符
int max = a > b ? a : b;
// 等价的if-else
int max2;
if (a > b) {
max2 = a;
} else {
max2 = b;
}
使用场景对比
| 特性 | 条件运算符 | if-else |
|---|---|---|
| 代码简洁度 | 简洁 | 较长 |
| 可读性 | 简单情况好 | 复杂情况好 |
| 返回值 | 必须返回值 | 可无返回值 |
| 执行语句 | 只能是表达式 | 可多条语句 |
| 适用场景 | 简单二选一 | 复杂多分支 |
Java
// 适合条件运算符:简单二选一
int max = a > b ? a : b;
String msg = isValid ? "有效" : "无效";
// 适合if-else:复杂逻辑
if (score >= 90) {
System.out.println("优秀");
sendNotification();
} else if (score >= 60) {
System.out.println("合格");
} else {
System.out.println("不合格");
retryTest();
}
条件运算符应用
求最大最小值
Java
int a = 10, b = 20, c = 15;
// 两个数最大值
int max2 = a > b ? a : b;
// 三数最大值
int max3 = a > b ? (a > c ? a : c) : (b > c ? b : c);
// 或使用Math.max
int max3b = Math.max(Math.max(a, b), c);
// 三数最小值
int min3 = a < b ? (a < c ? a : c) : (b < c ? b : c);
默认值设置
Java
String name = inputName != null ? inputName : "默认名";
int value = configValue != null ? configValue : 0;
// 等价于(Java 8+)
String name2 = Optional.ofNullable(inputName).orElse("默认名");
状态判断
Java
boolean isActive = true;
// 状态描述
String status = isActive ? "激活" : "未激活";
// 图标选择
String icon = isActive ? "active.png" : "inactive.png";
数值处理
Java
int amount = 100;
int maxAmount = 50;
// 限制范围
int actual = amount > maxAmount ? maxAmount : amount;
// actual = 50
// 空值处理
Integer value = null;
int result = value != null ? value : 0;
验证结果
Java
boolean isValid = checkInput(input);
// 返回不同消息
String message = isValid ? "验证成功" : "验证失败";
// 返回不同状态码
int code = isValid ? 200 : 400;
条件运算符注意事项
表达式类型兼容
两个表达式类型必须兼容。
Java
int a = 10;
// 类型兼容
String result = a > 0 ? "正数" : "负数"; // String
// 类型不兼容
// int value = a > 0 ? "正数" : -1; // 错误:String和int不兼容
// 正确:强转或统一类型
String value2 = a > 0 ? "正数" : String.valueOf(-1);
自动类型提升
Java
char c = 'A';
int n = 65;
// 自动提升
Object obj = true ? c : n; // 提升为int,再转为Object
// 实际返回int类型值65,不是char'A'
// 需要注意的类型提升问题
避免复杂嵌套
Java
// 不推荐:复杂嵌套难读懂
String result = a > 0 ? (b > 0 ? "ab正" : "a正b负") :
(b > 0 ? "a负b正" : "ab负");
// 推荐:使用if-else
if (a > 0 && b > 0) {
result = "ab正";
} else if (a > 0) {
result = "a正b负";
} else if (b > 0) {
result = "a负b正";
} else {
result = "ab负";
}
条件运算符优先级
优先级较低
条件运算符优先级低于算术、关系、逻辑运算符。
Java
int a = 10, b = 20;
// 关系运算先执行
int max = a > b ? a : b; // 先比较a>b,再判断
// 算术运算先执行
int result = a + b > 20 ? 100 : 0;
// a+b=30, 30>20=true, 返回100
// 括号明确优先级
int result2 = (a > b) ? a + 10 : b + 10;
要点总结
- 条件运算符是唯一的三元运算符
- 格式:条件 ? 表达式1 : 表达式2
- 条件为true返回表达式1,false返回表达式2
- 简洁替代简单if-else
- 适合二选一场景
- 两个表达式类型必须兼容
- 可嵌套使用,但不推荐复杂嵌套
- 优先级低于算术、关系、逻辑运算符
- 常用于求最大最小值、设置默认值
- 复杂逻辑建议用if-else
- 注意类型自动提升问题
📝 发现内容有误?点击此处直接编辑