Java从入门到放弃(九):布尔运算

布尔类型(boolean)是计算机编程中用于表示逻辑值的一种基本数据类型,它只有两个可能的值:true(真)和false(假)。布尔运算是基于这些逻辑值的运算,主要用于比较和逻辑决策。

以下是几种常见的布尔运算符及其用法:

  1. 比较运算符:用于比较两个值的大小或相等性。

    • >:大于
    • >=:大于或等于
    • <:小于
    • <=:小于或等于
    • ==:等于
    • !=:不等于
  2. 与运算(逻辑与)&&:当两个布尔表达式都为true时,结果为true。

  3. 或运算(逻辑或)||:如果两个布尔表达式中至少有一个为true,结果为true。

  4. 非运算(逻辑非)!:对布尔值取反,即true变为false,false变为true。

以下是一些布尔运算的示例:

boolean isGreater = 5 > 3; // 结果为true,因为5大于3。
int age = 12;
boolean isZero = age == 0; // 结果为false,因为age的值是12,不等于0。
boolean isNonZero = !isZero; // 结果为true,因为isZero是false,取反后变为true。
boolean isAdult = age >= 18; // 结果为false,因为age的值是12,小于18。
boolean isTeenager = age > 6 && age < 18; // 结果为true,因为age的值是12,大于6且小于18。

在布尔运算中,运算符的优先级决定了表达式的计算顺序。从高到低,优先级依次为:

  1. 非运算(!
  2. 比较运算符(>>=<<===!=
  3. 与运算(&&
  4. 或运算(||

短路运算

布尔运算中的短路特性是一个重要的概念,它指的是在执行布尔表达式时,如果已经可以根据当前的计算结果确定整个表达式的结果,那么后续的运算就不会再执行。这种特性可以提高程序的效率,并且在某些情况下避免潜在的错误。

在与运算(&&)中,如果第一个操作数为false,那么无论第二个操作数是什么,整个表达式的结果都将是false。因此,编译器或解释器会停止计算第二个操作数,直接返回false。这就是所谓的“短路”。

例如,在下面的代码中:

public class Main {
    public static void main(String[] args) {
        boolean b = 5 < 3; // b 的值为 false
        boolean result = b && (5 / 0 > 0); // 由于 b 为 false,短路,不计算后面的表达式
        System.out.println(result); // 输出结果为 false
    }
}

由于b的值为false,表达式b && (5 / 0 > 0)中的(5 / 0 > 0)部分不会被执行,因此不会因为除以零而导致错误。

相反,如果变量b的值为true,那么表达式将不会短路,而是会执行第二个操作数。但由于b在这个例子中是false,所以不会发生除以零的错误。

对于或运算(||),如果第一个操作数为true,那么无论第二个操作数是什么,整个表达式的结果都将是true。因此,如果第一个操作数已经确定为true,后续的运算同样会被短路,不再执行。

例如:

boolean result = true || (5 / 0 > 0); // 由于第一个操作数为 true,短路,不计算后面的表达式
// 结果为 true,后面的表达式不会被执行

三元运算符

Java语言中的三元条件运算符(?:)是一种简洁的条件表达式,它允许你根据一个布尔条件选择两个值中的一个。这种运算符的一般形式是condition ? expr1 : expr2,其中condition是一个布尔表达式,expr1expr2是两个表达式,它们的类型必须相同。

如果condition的结果为true,则返回expr1的结果;如果condition的结果为false,则返回expr2的结果。三元运算符在执行时会首先评估condition,然后根据结果决定计算expr1还是expr2,但不会同时计算两者。

下面是一个使用三元运算符的例子,它实现了求整数绝对值的功能:

public class Main {
    public static void main(String[] args) {
        int n = -100;
        int x = n >= 0 ? n : -n; // 如果 n 大于或等于 0,x 等于 n;否则,x 等于 -n
        System.out.println(x); // 输出结果为 100
    }
}

在这个例子中,n >= 0是一个布尔条件,如果这个条件为true(即n是非负数),则x的值就是n;如果条件为false(即n是负数),x的值就是-n。这样,无论n的初始值是多少,x最终都会是n的绝对值。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧