常见操作符(下篇)

接下来我们继续学习其他常见操作符。除了上一篇教程里面讲解到的算术操作符,大家可能容易想到的其他操作符就是比较操作符,比如用来比较两个数的大小。

没错,在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');
    }
}

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注