ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: 比较、条件运算

数学上有比较的运算,像是大于、等于、小于等等,Java中也提供了这些运算子,这些运算子称之为「比较运算子」(Comparison operator),它们有大于(>)、不小于(>=)、小于(<)、不大于(<=)、等于(==)以及不等于(!=)。

在Java中,比较的条件成立时以true表示,比较的条件不成立时 以false表示,请您看看下面这几行会显示哪些数值:

System.out.println("10 > 5 -> " + (10 > 5));
System.out.println("10 >= 5 -> " + (10 >= 5));
System.out.println("10 <  5 -> " + (10 < 5));
System.out.println("10 <= 5 -> " + (10 <= 5));
System.out.println("10 == 5 -> " + (10 == 5));
System.out.println("10 != 5 -> " + (10 != 5));

程序的执行如下所示:

10 > 5 -> true
10 >= 5 -> true
10 < 5 -> false
10 <= 5 -> false
10 == 5 -> false
10 != 5 -> true

比较运算在使用时有个即使是程序设计老手也可能犯的错误,且不容易发现,也就是等于 运算子(==),注意它是两个连续的等号(=)所组成,而不是一个等号,一个等号是指定运算子,这点必须相当注意,例如若有两个变量x与y 要比较是否相等,是写成x == y,而不是x = y,后者的作用是将y的值指定给x,而不是比较运算。

另一个使用 == 运算时要注意的是,对于对象来说,两个对象参考之间使用 == 作比较时,是比较其名称是否参考至同一对象,而不是比较其内容,您可以参考 不可变的 (immutable)字符串 了解一下这段话的意义。

即然谈到了条件式的问题,来介绍Java中的「条件运算子」 (Conditional operator),它的使用方式如下:
条件式 ? 成立传回值 : 失败传回值

条件运算子的传回值依条件式的结果而定,如果条件式的结果为true,则传回冒号前的值,若为false,则传回冒号后的值,下面这个程序可以作个简单的 示范:

ConditionalOperator.java
import java.util.Scanner;
public class ConditionalOperator {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入学生分数: ");
		int scoreOfStudent = scanner.nextInt();
		System.out.println("该生是否及格? " +
		(scoreOfStudent >= 60 ? '是' : '否'));
	}
}

执行结果:

请输入学生分数: 77
该生是否及格? 是

这个程序会依您所输入的分数来判断学生成绩是否不小于60分,以决定其是否及格,如果是则传回字符 '是' ,否则传回字符 '否'。

条件运算子(?:)相当的好用,使用得当的话可以省去不少的程序代码,例如下面这个程序可以判断使用者输入是否为奇数。

ConditionalOperator.java
import java.util.Scanner;
public class ConditionalOperator {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入数字: ");
		int inputedNumber = scanner.nextInt();
		System.out.println("是否为奇数? " +
		(inputedNumber%2 != 0 ? '是' : '否'));
	}
}

当输入的数为奇数时,就不能被2整除,所以余数一定不是0,在条件式中判断为true,因而传回字符 '是' ,若数值为偶数,则2整除,所以余数为0,在条件式中判断为false,所以传回字符 '否'。