CodeGym /课程 /JAVA 25 SELF /Java 中的三元运算符:简洁条件与注意事项

Java 中的三元运算符:简洁条件与注意事项

JAVA 25 SELF
第 3 级 , 课程 5
可用

1. 表达式 vs 语句

在 Java 中,一切可分为两类:语句(Statement)和 表达式(Expression)。通常我们说语句会被执行,而表达式会被求值。不过这不是关键点。

语句与表达式的根本区别在于:表达式有求值结果。该结果首先有类型;其次,这个结果可以被赋值到某处,或者用于另一个表达式中。

示例:

代码 备注
int x;
语句
(a < 10)
表达式,类型为 boolean
i++;
表达式,类型与变量 i 的类型相同
x = 5;
表达式,类型与变量 x 的类型相同

那这对我们有什么用?

首先,我们可以利用这样一个事实:许多看似“语句”的东西其实也是表达式(有求值结果)。例如,下面的代码是可行的:

int x, y, z; 
x = y = z = 1; 	// x = (y = (z = 1));

其次,如果我们愿意,也可以忽略表达式的求值结果。

console.nextLine();	//	忽略输入的结果

当表达式除了返回结果之外还会产生某些有用的副作用,而我们只关心副作用、不关心结果时,就可以忽略该结果。

2. 三元运算符

Java 三元运算符

这个小技巧比前一个更有意思。Java 提供了一个特殊的三元(即三目)运算符。它有点像 if–else 的简写:


Uslovie ? Vyrazhenie1 : Vyrazhenie2;
三元运算符的语法

如果条件为真,则执行表达式1,否则执行表达式2。条件后面是问号,两个表达式之间用冒号分隔。

三元运算符与 if-else 的主要区别在于:三元运算符本身是一个表达式,因此它的结果可以被赋值。

例如,我们要计算两个数的最小值。使用三元运算符,代码如下:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

或者,假设你需要根据某个条件给变量赋不同的值,该怎么写?

方案一——使用 if-else

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

方案二——使用三元运算符,也就是 if-else 的简写:

int age = 25;
int money = age > 30 ? 100 : 50;

那么该用 if-else 还是三元运算符更好?从执行速度看,几乎没有区别。更重要的是代码的可读性——代码不仅要正确运行,还要便于他人阅读与维护。

一个简单的经验是:如果逻辑能写在一行——用三元运算符;如果一行放不下——更适合用 if-else

3. 使用细节

值的类型

重要的是要记住:三元运算符的两个分支(<值_为真时><值_为假时>)要么类型相同,要么彼此兼容(例如两个都是 String,或两个都是 int)。

可行:

int a = 10, b = 20;
int max = (a > b) ? a : b; // 两个分支都是 int

编译错误:

int a = 10, b = 20;
// String 和 int 不兼容
String result = (a > b) ? "更大" : 0; // 编译错误:不能将 int 赋给 String 类型的变量

正确写法:

int a = 10, b = 20;
String result = (a > b) ? "更大" : "小于或等于";

示例:处理数字

用三元运算符计算绝对值:

int number = -5;
int abs = (number >= 0) ? number : -number;
System.out.println(abs); // 5

4. 将三元运算符嵌入到应用中

我们来写一个简单的交互式应用:除了问候外,程序还会告诉用户明年几岁,并指出是否成年。

System.out.print("请输入你的名字:");
String name = console.nextLine();

System.out.print("请输入你的年龄:");
int age = console.nextInt();

int nextYear = age + 1;
String status = (nextYear >= 18) ? "已成年" : "未成年";

System.out.println("你好," + name + "!明年你将 " + nextYear + " 岁。你将是 " + status + "。");

细节说明:

变量 status 通过三元运算符计算:如果一年后年龄不少于 18,则用户将是成年人(或仍然是)。

5. 嵌套三元运算符——谨慎使用!

三元运算符可以相互嵌套(在每个分支里再放一个三元表达式)。但是……这通常会降低可读性,尤其是对后来阅读代码的人(哪怕是两天后的你)。

示例:按年龄划分类别

String category = (age < 7) ? "学龄前儿童" :
                  (age < 18) ? "中小学生" :
                  (age < 65) ? "成人" : "退休人员";

决策表:

年龄 条件 结果
< 7
age < 7
学龄前儿童
7–17
age < 18
中小学生
18–64
age < 65
成人
65 及以上 否则 退休人员

这样的代码勉强还能读,但若逻辑更复杂——最好使用 if-else if-else

6. 小技巧:三元运算符与 boolean 类型

有时会写出这样的表达式:

boolean adult = (age >= 18) ? true : false;

但这其实是多余的。表达式 (age >= 18) 本身就返回 boolean。因此可以简化为:

boolean adult = (age >= 18);
1
调查/小测验
条件运算符第 3 级,课程 5
不可用
条件运算符
条件运算符: if else
评论 (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
null 级别 6,-,Singapore
18 一月 2026
深夜闯关