if 语句
上面讲到的程序,都是顺序程序,程序中所有语句都是按照语句的先后次序,顺序执行。但是,如果根据情况来决定是否执行某一段代码时,就需要用到分支语句 if
语句。
if
语句的基本语法是:
if (条件) {
// 条件满足时执行的语句
}
if
语句根据条件的计算结果(true还是false),决定是否执行 if
语句块(花括号 { } 包含的所有语句)。
让我们来看一个例子:
public class Main {
public static void main(String[] args) {
int n = 70;
if (n >= 60) {
System.out.println("合格");
}
System.out.println("END");
}
}
当条件 n >= 60 计算结果为 true 时, if
语句块被执行,将打印 “合格”,否则, if
语句块将被跳过。修改 n 的值可以看到不同的执行结果。
注意, if
语句可以包含多条语句:
public class Main {
public static void main(String[] args) {
int n = 70;
if (n >= 60) {
System.out.println("合格");
System.out.println("恭喜通过测试");
}
System.out.println("END");
}
}
当 if
语句块只有一行语句时,也可以省略花括号 { }:
public class Main {
public static void main(String[] args) {
int n = 70;
if (n >= 60)
System.out.println("恭喜通过测试");
System.out.println("END");
}
}
但是,省略花括号并不总是一个好主意。假设某个时候,突然想给 if
语句块增加一条语句时,如果忘记增加花括号,就会导致执行出现问题。
else语句
if
语句还可以编写一个 else
{ … }部分,表示当条件判断为 false 时,将执行语句块:
public class Main {
public static void main(String[] args) {
int n = 70;
if (n >= 60) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
System.out.println("END");
}
}
修改上述代码 n 的值,观察 if
条件为 true 或 false 时,程序执行的语句块。
注意,else
不是必须的。
else if语句
if
… else
这种结构,只适合于 “二选一” 的模式,及只有两种结果的情况。但实际情况并不是只有这样的,“三选一”、“四选一” 的模式改如何解决呢,这就需要用到 else if
这种结构了。
例如,在进行成绩判断时,分为“优”、“良”、“中”、“差” :
public class Main {
public static void main(String[] args) {
int n = 70;
if (n >= 90) {
System.out.println("优");
} else if (n >= 75) {
System.out.println("良");
} else if (n >= 60) {
System.out.println("中");
} else {
System.out.println("差");
}
}
}
在串联使用多个 if
时,要特别注意判断顺序。观察下面的代码:
public class Main {
public static void main(String[] args) {
int n = 100;
if (n >= 60) {
System.out.println("中");
} else if (n >= 90) {
System.out.println("优");
} else if (n >= 75) {
System.out.println("良");
} else {
System.out.println("差");
}
}
}
执行发现,n = 100 时,满足条件 n >= 90,但输出的不是 优,而是 中,原因是 if
语句从上到下执行时,先判断 n >= 60 成功后,后续 else
不再执行,因此,if (n >= 90) 没有机会执行了。
因此,正确的方式是按照判断范围 从大到小
依次判断,或者按照 从小到大
的顺序依次判断。
判断引用类型相等
在Java中,判断值类型的变量是否相等,可以使用 ==
运算符。但是,判断引用类型的变量是否相等,==
表示 “引用是否相等”,或者说,是否指向同一个对象。例如,下面的两个String类型,它们的内容是相同的,但是,分别指向不同的对象,用 ==
判断,结果为 false:
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO".toLowerCase();
System.out.println(s1);
System.out.println(s2);
if (s1 == s2) {
System.out.println("s1 == s2");
} else {
System.out.println("s1 != s2");
}
}
}
要判断引用类型的变量内容是否相等,必须使用 equals()
方法:
public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO".toLowerCase();
System.out.println(s1);
System.out.println(s2);
if (s1.equals(s2)) {
System.out.println("s1 equals s2");
} else {
System.out.println("s1 not equals s2");
}
}
}
小结
if ... else
可以做条件判断,else
是可选的;- 不推荐省略花括号
{}
; - 多个
if ... else
串联要特别注意判断顺序; - 要注意浮点数判断相等不能直接用
==
运算符; - 引用类型判断内容相等要使用
equals()
。