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. Spring Boot 使用Apollo动态调整日志级别

    摘要:在Spring Boot 项目中,借助Apollo动态修改配置的能力,结合Logback修改日志级别打印执行的SQL脚本. 综述   在生产环境偶现测试环境未发现的SQL查询BUG,但由于线上关 ...

  2. 浅析Java8中default关键字

    摘要:介绍Java8新增关键字default,它用于在接口中标记方法为默认方法和编写实现逻辑,方便通过新增方法重构接口,而无需修改所有实现类,目的在于兼容接口已有实现类. 综述   default关键 ...

  3. 【Java】汉字转拼音

    将汉字转成拼音及汉字首字母,可以使用jar包 pingyin4j,但是遇到多音节汉字就会有问题.如果使用大名鼎鼎的jpinyin,可以自动识别常见多音字,而且还支持简体转换为繁体,检查是简体还是繁体, ...

  4. Go与C/C++ 互相调用

    A. Go调用C 1.Go调用C:在go文件里调C(以下代码中除了开头的注释之外,其他注释不可删除) /* * go 和 C 互调用程序 */ package main /* int Add( int ...

  5. K8s集群中的DNS服务(CoreDNS)详解

    概述 官网文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/dns-pod-service/ 在 Kubernetes( ...

  6. MySQL技术内幕 InnoDB存储引擎 B+树索引的使用 笔记

    什么时候添加B+树索引呢? 在访问表中很少一部分时使用B+树索引才有意义. Q: 怎么查看索引是否是高选择性的呢? A:可以通过SHOW INDEX 结果中的列 Cardinality 来观察.Car ...

  7. 给Markdown渲染网页增加一个目录组件(Vite+Vditor+Handlebars)(下)

    1 引言 在上一篇文章<给Markdown渲染网页增加一个目录组件(Vite+Vditor+Handlebars)(上)>中笔者介绍了如何实现在Markdown渲染网页中加一个目录组件.不 ...

  8. Hadoop:Yarn设计原理

    一.Yarn基本架构 YARN主要由ResourceManager.NodeManager.ApplicationMaster和Container组成,之间通过RPC通讯 1.ResourceMana ...

  9. pdfjs-dist v2.11.338写个react demo

    app.jsx import './App.css' import * as pdfjs from "pdfjs-dist"; import "pdfjs-dist/we ...

  10. 前端开发系列005-基础篇之JavaScript严格模式

    本文将重点介绍ES5中严格模式相关的知识点,包括但不限于严格模式的介绍.写法.严格模式和非严格模式使用对比等内容. 一.严格模式简单介绍 在JavaScript中有严格模式和非严格模式两种运行环境. ...