5.3 条件语句

为了编写有用的程序,几乎都需要检查添加并采取相应的措施。条件语句(conditional statement)提供了这样的功能。if 语句是 Java 中最简单的条件语句:

  1. if (x > 0) {
  2. System.out.println("x is positive");
  3. }

括号内的表达式被称为条件,如果它为 true,那么将执行大括号内的语句,否则将跳过这个代码块。括号内的条件可以是任何 boolean 表达式。

还有一种包含两种可能性(分别由 ifelse 标识)的条件语句。这些可能性称为分支(branch),由条件决定将执行哪个分支:

  1. if (x % 2 == 0) {
  2. System.out.println("x is even");
  3. } else {
  4. System.out.println("x is odd");
  5. }

如果 x 除以 2 的余数为 0,则 x 为偶数,因此上述代码片段显示相应的消息。如果不满足这个条件,则执行第二条打印语句。由于要么满足条件,要么不满足条件,因此只有一个分支会被执行。

对于只有一条语句的分支来说,大括号是可选的,因此前一个示例可以写成下面这样:

  1. if (x % 2 == 0)
  2. System.out.println("x is even");
  3. else
  4. System.out.println("x is odd");

然而,即便大括号是可有可无的,最好不要省略,这样可避免在 ifelse 代码块中添加语句时因忘记加大括号而导致错误。

  1. if (x > 0)
  2. System.out.println("x is positive");
  3. System.out.println("x is not zero");

这些代码没有正确地缩进,因此极具误导性。由于省略了大括号,只有第一个 printlnif 语句的一部分。在编译器看来,上述代码实际上是以下这样的:

  1. if (x > 0) {
  2. System.out.println("x is positive");
  3. }
  4. System.out.println("x is not zero");

因此,在任何情况下都将执行第二条 println 语句。即便是经验丰富的程序员也会犯这样的错误,只要在网上搜索 goto fail 就会有所了解了。