Java布尔运算:逻辑判断的核心机制

布尔运算的基本类型

Java中的布尔运算主要包括比较运算逻辑运算两大类。

比较运算符

比较运算符用于判断两个值的关系,返回boolean类型的结果:

  • >:大于
  • >=:大于等于
  • <:小于
  • <=:小于等于
  • ==:等于(注意与赋值运算符=的区别)
  • !=:不等于

示例代码:

int a = 10;
int b = 20;
boolean isGreater = a > b; // false
boolean isEqual = a == b; // false
boolean isNotEqual = a != b; // true

逻辑运算符

逻辑运算符用于组合多个布尔表达式,形成更复杂的逻辑判断:

  • !:非运算(取反),!truefalse!falsetrue
  • &&:与运算,两个操作数都为true时结果才为true
  • ||:或运算,两个操作数有一个为true时结果就为true

示例代码:

boolean flag1 = true;
boolean flag2 = false;
System.out.println(!flag1); // false
System.out.println(flag1 && flag2); // false
System.out.println(flag1 || flag2); // true

运算优先级规则

当多个运算符出现在同一个表达式中时,Java定义了明确的运算优先级,决定了运算的执行顺序。布尔运算的优先级从高到低依次为:

  1. 非运算 !
  2. 比较运算符 >>=<<=
  3. 相等判断 ==!=
  4. 与运算 &&
  5. 或运算 ||

示例代码:

int x = 5;
int y = 10;
int z = 15;
// 等价于 (x < y) && (y < z)
boolean result = x < y && y < z; // true

当不确定优先级时,最简单也最推荐的做法是使用括号()明确指定运算顺序,提高代码可读性:

// 使用括号明确运算顺序,更易读
boolean clearResult = (x < y) && (y < z);

关键特性:短路运算

布尔运算最独特也最实用的特性是短路运算,这一特性可以提高程序执行效率并避免潜在错误。

与运算的短路特性

对于&&运算,如果第一个操作数为false,则无论第二个操作数是什么,结果都一定是false。因此,Java会停止计算第二个操作数,直接返回false

int num = 0;
// 第一个条件为false,第二个条件不会执行
boolean result = (num > 5) && (10 / num > 1);
System.out.println(result); // false,且不会抛出除零异常

上述代码中,由于num > 5false&&右侧的10 / num不会被执行,因此避免了除零异常。

或运算的短路特性

对于||运算,如果第一个操作数为true,则无论第二个操作数是什么,结果都一定是true。因此,Java会停止计算第二个操作数,直接返回true

int num = 10;
// 第一个条件为true,第二个条件不会执行
boolean result = (num > 5) || (10 / 0 > 1);
System.out.println(result); // true,且不会抛出除零异常

短路运算不仅能提高程序效率(避免不必要的计算),还能防止潜在的运行时错误,是Java布尔运算中非常重要的特性。

三元运算符:简洁的条件判断

Java提供了一种特殊的运算符——三元运算符(也称为条件运算符),它是布尔运算的一种扩展应用,语法形式为:布尔表达式 ? 表达式1 : 表达式2

三元运算符的运算规则是:如果布尔表达式为true,则返回表达式1的值;否则返回表达式2的值。

示例代码:

int score = 85;
String result = (score >= 60) ? "及格" : "不及格";
System.out.println(result); // 及格

三元运算符的特性

  1. 短路性:三元运算符也是短路运算,只计算表达式1或表达式2中的一个
  2. 类型一致性:表达式1和表达式2的类型必须相同或可兼容
  3. 嵌套使用:可以嵌套使用三元运算符实现复杂判断

嵌套使用示例:

int score = 85;
String grade = (score >= 90) ? "优秀" :
(score >= 80) ? "良好" :
(score >= 60) ? "及格" : "不及格";
System.out.println(grade); // 良好

虽然三元运算符可以简化代码,但过度嵌套会降低可读性,应适度使用。

布尔运算的应用

布尔运算在实际编程中应用广泛,主要体现在以下几个方面:

  1. 条件判断ifelse if语句中的条件表达式
  2. 循环控制whilefor循环中的循环条件
  3. 逻辑验证:数据合法性校验
  4. 状态判断:对象状态检查

示例:使用布尔运算进行数据验证

int age = 17;
String idCard = "123456789012345678";
// 验证年龄是否大于18且身份证号长度是否为18位
boolean isQualified = (age >= 18) && (idCard.length() == 18);
if (isQualified) {
System.out.println("符合条件");
} else {
System.out.println("不符合条件");
}

总结

  1. 与运算&&或运算||是短路运算;

  2. 三元运算b ? x : y后面的类型必须相同,三元运算也是“短路运算”,只计算x或y。

Java程序基础——4.布尔运算的更多相关文章

  1. 使用.bat来执行Java程序基础

    将java程序做成可运行的jar后,又希望使用.bat文件来调用jar时,有几点需要注意的. 1.设置path和classpath .bat文件中扥的内容如下: @echo off set MY_HO ...

  2. Java程序基础编程基础

    1.在屏幕上输出"你好" //Programmer name Helloword.javapublic class Helloword { public static void m ...

  3. java程序基础

  4. 到头来还是逃不开Java - Java13程序基础

    java程序基础 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来. ...

  5. day2Java程序基础

    Java程序基础 Java程序基本结构 一个程序的基本单位是class,class是关键字 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写字母开头 public除了修饰类 ...

  6. JAVA_SE基础——5.第一个Java程序HelloWorld&注释的应用

    配置完JDK&环境变量后,我们就可以开始写程序了,那么程序怎么写呢,用什么工具呢,我建议 为了方便学习,我们最好在一个磁盘下建立一个专门的文件来写java程序,比如就在D盘下建立一个名为&qu ...

  7. Java并发程序设计(二)Java并行程序基础

    Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/1 ...

  8. JAVA并行程序基础

    JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级 ...

  9. JAVA 程序监控基础简述

    最近在项目中自感程序木有问题,也没有什么错误日志出来.但就是有人反映服务慢,有时连不上的情况.为了解决这么妖的问题只能去详细的看看运行中的程序到底出了什么情况,这时如果有个比较好的监控工具可以监控运行 ...

  10. Java 零基础跑起第一个程序

    Java 零基础跑起第一个程序 一 概述 1  java代码编译 编译后才干在计算机中执行.编译就是把人能看懂的代码转换成机器能看懂的形式 2 java的长处 一次编译.到处执行.由于java代码是在 ...

随机推荐

  1. 数组:ArrayList和int[]

    需要好好复习一下: 数组ArrayList和int[ ] int[ ] 多可以使用Arrays工具类导入后 使用Arrays.xxx(arr) 实现很多功能

  2. ArcGIS工具操作报错999999的通用处理方式

      本文介绍一种解决ArcGIS中ERROR 999999报错(Configuration RasterCommander ImageServer can not be started)的方法.    ...

  3. SAP的PI日志查看工具

    被很多人吐槽的SAP PI能坚挺的活下来,真是不容易... SXI_MONITOR是PI的标准的消息查看器,如果又权限的话,甚至可以做自定义字段的查询增强(如果对单据创建接口,增加单号...速度杠杠的 ...

  4. jupyter notebook中使用pytorch

    jupyter notebook中使用pytorch 1.问题 在使用pytorch时,使用jupyter notebook无法调用,也没有可以调整更改的环境 错误提示:No module named ...

  5. UFT 笔记(1)

  6. 【闲话 No.3】 并查集相关

    命に嫌われている. 小唐话 感觉有的时候已经无法与人正常交流,净做唐事.说些唐话了.或许是我无法准确猜到别人喜欢什么吧. 不过还是自己心底一点 joker 之心/私心作祟吧. 感觉我有时做的唐事真的挺 ...

  7. openGauss数据库部署实践(华为云开发者云实验)

    前言 数据库课程上了解到openGuass数据库,做完云实验发现实验指导手册有些地方不够细致或者已经与实际的操作步骤有所偏差,遂写一篇博客为其他同学学习提供参考. 什么是openGuass? open ...

  8. android打电话简单功能(完整代码)

    MainActivity.java: 1 package broadcastreceiver.lgqrlchinese.com.heima76android_1_phonedall; 2 3 impo ...

  9. vue被部署到子(二级)目录

    需求有的时候,你的域名很珍贵,除了二级域名外.你还可以将你的项目部署在服务器二级目录下,这样的话,就可以部署多个项目了.比如说,我有一个域名为dshvv.com的服务器,我想部署两个项目:12306项 ...

  10. qsort 浅度解析

    #include <stdio.h>#include <string.h>#include <stdlib.h>//标准库          qsort的标准库ch ...