0.基本语法:
if (条件) {
//条件满足时执行
}
1.if else{...}
if (条件) {
//条件满足时执行
} else {
//条件不满足时执行
}
2.if ... else if ...串联
if (条件1) {
//程序1
} else if (条件2) {
//程序2
} else {
//程序3
}
3.注:
(0).if 语句从上到下执行时,第一个判断成功,则后续的else就不再执行。
(1).使用 if 时,还要特别注意边界条件,如:原因是 > 和 >= 效果是不同的。
(2).浮点数在计算机中常常无法精确表示,并且计算可能出现误差,因此,判断浮点数相等用 == 判断不靠谱:
public class Main {
public static void main(String[] args) {
double x = 1 - 9.0 / 10;
if (x == 0.1) {
System.out.println("x is 0.1");
} else {
System.out.println("x is NOT 0.1");
}
}
}
正确的方法是利用差值小于某个临界值来判断:
public class Main {
public static void main(String[] args) {
double x = 1 - 9.0 / 10;
if (Math.abs(x - 0.1) < 0.00001) {
System.out.println("x is 0.1");
} else {
System.out.println("x is NOT 0.1");
}
}
}
4.判断引用类型相等:
在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");
}
}
}
注意: 执行语句 s1.equals(s2) 时,如果变量 s1为 null ,会报 NullPointerException :
public class Main {
public static void main(String[] args) {
String s1 = null;
if (s1.equals("hello")) {
System.out.println("hello");
}
}
}
要避免 NullPointerException 错误,可以利用短路运算符 && :
public class Main {
public static void main(String[] args) {
String s1 = null;
if (s1 != null && s1.equals("hello")) {
System.out.println("hello");
}
}
}
还可以把一定不是 null 的对象 "hello" 放到前面:
if ("hello".equals(s)) { ... }