你好!今天的课不会很长,但绝对有用:) 我们要讲的就是所谓的三元运算符。
三元的意思是“由三部分组成”。
顺便说一句,条件周围的括号不是必需的:我们添加它们是为了提高可读性。它也可以在没有它们的情况下工作:
一般的建议是:如果条件简单且易于验证,则可以无害地使用三元运算符。这使您可以减少代码量和
它汇集了针对程序员的最佳实践和建议,这将帮助您编写不仅实用而且易于阅读的代码。

if-else
它是您已经遇到的控制流语句的替代方法。让我们举个例子。假设有人决定去看一部 R 级电影(17 岁以下需要父母或成年监护人陪同)。接待员在门口检查年龄:如果年龄检查合格,则允许进入;如果没有,他将被送回家。让我们声明一个Person
类并使用if-else
语句检查它:
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
控制台输出:
"Everything is in order. Come in!"
如果我们删除控制台输出,那么我们的检查如下所示:
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
这里的逻辑非常简单:检查一个条件(年龄 >= 18),根据结果,usherResponse
将变量分配给两个字符串之一,并附上引座员的回复。这种情况(“一种情况 - 两种可能的结果”)在编程中极为常见。这就是创建三元运算符的原因。我们可以使用它来将我们的检查简化为一行代码:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
下面是这个运算符的工作原理。它被称为三元运算符,因为它涉及 3 个组件:
- 一个条件 (
person.getAge() > 18
) - 两种可能的结果(“一切正常。进来吧!”和“这部电影不适合你的年龄!”)
person.getAge() > 18 ?
“这个人的年龄超过十八岁了吗?” 然后我们写入第一个值。如果条件评估为true
:,则使用此值:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
这个人的年龄是否超过 18 岁?如果是,将 usherResponse
变量设置为“一切正常。进来吧!” 接下来是“ :
”符号和第二个值。如果条件评估为false
:,则使用此值:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
这个人的年龄是否超过 18 岁?如果是,将 usherResponse
变量设置为“一切正常。进来吧!” . 如果不是,请将 usherResponse
变量设置为“这部电影不适合您的年龄!” 通常,三元运算符的逻辑如下所示。健康)状况 ?outcome 1 : outcome 2 
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
那么你应该使用什么?语句if-else
还是三元运算符?在性能方面,没有区别。更准确地说,也许有,但微不足道。这里最大的考虑是代码的可读性。您编写的代码不仅要能正常工作,而且要易于阅读。毕竟,它可能会被其他程序员、您的同事“继承”!如果很难理解,就会使他们的工作和你的工作复杂化(他们会每 5 分钟跑来找你解释)。 if-else
声明(可能已经有很多)。但是如果条件比较复杂,涉及多个步骤,还是用if-else
语句比较好。例如,在这种情况下使用三元运算符不是一个好主意:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
目前还不清楚这里发生了什么!代码变得非常难以阅读。而这一切都是因为复杂的条件:
- 如果有人年满 18 岁,有门票(或免费通行证)并且没有年幼的孩子,他可以进来。
- 如果条件的一部分是假的,那么他就不能。
if-else
. 是的,我们的代码会更大,但会更易读。而且你的同事如果继承了这段代码就不会打脸了:) 最后,我可以为你推荐一个好东西。我们在课程中谈到了代码的可读性。Robert Martin 的经典之作《Clean Code》就是专门讨论这个话题的。 
GO TO FULL VERSION