接下来我们继续学习其他常见操作符。除了上一篇教程里面讲解到的算术操作符,大家可能容易想到的其他操作符就是比较操作符,比如用来比较两个数的大小。
没错,在Java中也支持比较运算,这与数学里面一样。如果我们要比较整数15是否大于20,可以这样编写代码,
15 > 20
对应地,这里的大于号“>”也就被叫做比较操作符。比较运算的结果是一个布尔类型,常常出现在代码里面需要进行逻辑判断的地方。
在Java里面支持大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)以及不等于(!=)这几种比较运算。下面我们仍然通过编写代码来学习。
System.out.println(15 < 20);
System.out.println(15 <= 20);
System.out.println(15 > 20);
System.out.println(15 >= 20);
System.out.println(15 == 20);
System.out.println(15 != 20);
如果运行上面这段代码,大家的屏幕上将会打印
true
true
false
false
false
true
这里用整数来示例了比较操作符的用法,对于浮点数用法也一样。
System.out.println(0.35 < 0.75);
System.out.println(0.35 <= 0.75);
System.out.println(0.35 > 0.75);
System.out.println(0.35 >= 0.75);
System.out.println(0.35 == 0.75);
System.out.println(0.35 != 0.75);
由于电脑在表示浮点数时存在精度误差,因此我们在对浮点数进行比较运算时需要特别注意,最好是不直接对两个浮点数进行直接比较。
System.out.println((0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1) == 1);
如果像上面这样编写代码,运行程序时屏幕上将会打印“false”。原因很简单,等于操作符==左边的运算结果是一个非常接近1的数值,但不是1。这里我们使用圆括号“()”告诉程序,在进行比较运算前先计算表达式“0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1”的值。
比较两个浮点数是否相等最好的做法,就是比较它们的差是否小于某个最小精度,比如1e-7。
System.out.println((1.0-0.999) < 1e-7);
System.out.println((1.0-0.999999999999999) < 1e-7);
如果大家运行上面这段代码,屏幕上会打印
false
true
结果说明,在最小精度为1e-7时,0.999不近似等于1.0,相反0.999999999999999则近似等于1.0。
在Java中除了数字支持比较运算,字符也支持比较运算。
System.out.println('A' < 'a');
System.out.println('A' <= 'a');
System.out.println('A' > 'a');
System.out.println('A' >= 'a');
System.out.println('A' == 'a');
System.out.println('A' != 'a');
上面的代码里面,第一行我们通过比较操作符<来比较大写字母“A”是否小于小写字母“a”。对于其他比较操作,它们的用法类似。
如果运行这段代码,我们的屏幕上会打印
true
true
false
false
false
true
先来解释一下为什么会有这些结果。在计算机中,各种字符是用数字来编码过的,这套编码有一个国际标准。比如在ASCII编码标准中,大写字母A的编码是65,小写字母a的编码是97。因此表达式“’A’ < ‘a’”的实际意义可以理解为,在编码表中字符“A”是否位于字符“a”之前。
关于常用操作符,大家暂时先学习到这个程度。对于逻辑操作符,后面我们在学习条件语句的时候会继续学习。其他一些目前大家编写Java代码时不会用到的操作符,后面有需要再学习,比如移位操作符等等。
下面仍然贴上本节教程的完整代码。
public class OperatorsDemo2 {
public static void main(String[] args) {
// 整数比较运算
System.out.println(15 < 20);
System.out.println(15 <= 20);
System.out.println(15 > 20);
System.out.println(15 >= 20);
System.out.println(15 == 20);
System.out.println(15 != 20);
System.out.println("=====================");
// 浮点数比较运算
System.out.println(0.35 < 0.75);
System.out.println(0.35 <= 0.75);
System.out.println(0.35 > 0.75);
System.out.println(0.35 >= 0.75);
System.out.println(0.35 == 0.75);
System.out.println(0.35 != 0.75);
System.out.println("=====================");
System.out.println((0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1) == 1);
System.out.println("=====================");
System.out.println((1.0-0.999) < 1e-7);
System.out.println((1.0-0.999999999999999) < 1e-7);
System.out.println("=====================");
// 字符类型比较运算
System.out.println('A' < 'a');
System.out.println('A' <= 'a');
System.out.println('A' > 'a');
System.out.println('A' >= 'a');
System.out.println('A' == 'a');
System.out.println('A' != 'a');
}
}