Java基础(三):逻辑运算符详解

Java基础系列文章

Java基础(一):发展史、技术体系与JDK环境配置详解

Java基础(二):八种基本数据类型详解

Java基础(三):逻辑运算符详解

目录

  • 一、什么是逻辑运算符?
  • 二、基础逻辑运算符(3种)
    • 1、&&逻辑与(短路与)
    • 2、||逻辑或(短路或)
    • 3、!逻辑非
  • 四、非短路逻辑运算符(2种)和异或(1种)
    • 1、&与|(非短路)
    • 2、^异或
    • 五、逻辑运算符优先级
  • 总结


一、什么是逻辑运算符?

  逻辑运算符用于连接多个布尔表达式(即返回值为 truefalse 的表达式),根据逻辑规则(如与、或、非)对表达式进行运算,最终得到一个布尔值。


二、基础逻辑运算符(3种)

1、&&逻辑与(短路与)

语法:

boolean a = true, b = false;
System.out.println(a && b);  // false(全真才真)

说明:

  • 当第一个表达式为 false 时,Java 不再判断第二个表达式,直接返回 false。这种行为称为“短路”
  • 常用于防止空指针异常
if (obj != null && obj.getValue() > 10) {// 安全执行 obj.getValue()
}

2、||逻辑或(短路或)

语法:

boolean a = true, b = false;
System.out.println(a || b);  // true(有真即真)

说明:

  • 当第一个表达式为 true 时,Java 会跳过第二个表达式的计算
  • 常用于提供备选条件
if (user.isAdmin() || user.hasPermission("EDIT")) {// 允许访问
}

3、!逻辑非

语法:

boolean a = true,
System.out.println(!a);      // false(取反)

说明:

  • 对布尔表达式取反
  • 常用于状态切换条件反向
if (!isValid) {System.out.println("数据无效!");
}

四、非短路逻辑运算符(2种)和异或(1种)

  & | ^被同时用于逻辑运算位运算,源于编程语言的语法设计:当操作数为布尔值时执行逻辑运算,为整数时执行位运算。

1、&与|(非短路)

与&&和|的异同:

  • 相同点:对于逻辑运算&&和&与||和|运算返回结果一致
  • 不同点:&|始终计算两个表达式,无论第一个表达式的值如何
boolean result = (a > 0) & (b++ > 0);  // b 一定会自增

2、^异或

语法:

System.out.println(true ^ true);   // false
System.out.println(false ^ false); // false
System.out.println(true ^ false);  // true

说明:

  • 两个表达式一个为真,一个为假时,结果才为 true
  • 实际上可以用于检查两个状态是否“互斥”
boolean isSingle = true;
boolean isMarried = false;
if (isSingle ^ isMarried) {System.out.println("状态有效");
}

五、逻辑运算符优先级

优先级从高到低(部分):

  1. ! (逻辑非)
  2. &&(逻辑与)
  3. ||(逻辑或)
// 复杂表达式示例
boolean result = !false || true && false;
// 等价于:(true) || (true && false) → true// 使用括号明确意图(推荐!)
boolean safeResult = (!false) || (true && false);

总结

  &&、|| 和 ! 是逻辑运算符,用于布尔值判断,返回布尔值;而 &、|、^ 是常用于按位运算符,用于按位操作整数,返回整数(下篇文章细讲),这里&、|、^ 也可以用于逻辑运算符。

运算符名称描述
&&逻辑与(AND)两个条件都为 true 时,结果为 true
||逻辑或(OR)只要一个条件为 true,结果就是 true
!逻辑非(NOT)取反操作,将 true 变成 false,反之亦然
&位与逻辑与运算但不会短路(始终计算两侧表达式)
|位或逻辑或运算但不会短路(始终计算两侧表达式)
^异或两个条件不同为 true,相同为 false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910469.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bugku-CTF-web

最近刷了一下 Bugku-CTF-web 的61-70题(平台目前只有67),好难好难,全都是知识的盲区。各种代码审计,各种反序列化,各种反弹shell,各种模版注入,各种字符串绕过,可以说是W…

GitLab 工具如何提升我的工作效率

在当今快节奏的软件开发和技术创作领域,作为一名博主,高效的工作流程和强大的协作工具至关重要。GitLab 作为一款集成了版本控制、项目管理、持续集成与持续部署(CI/CD)等功能于一体的平台,为我的工作带来了巨大的便利…

Unity Addressable使用之服务器远程加载

本地模拟服务器加载 1、创建一个Profiles,将Remote设为Editor Hosted 2、在Addressables Group窗口将Profile设为Local Test 3、将某个Asset Groups设为Remote加载 4、Build资源 5、打开本地模拟服务器 Addressables Hosting 窗口是 Addressable 提供的一个内置本…

Java基础八股文 - 面试者心理历程与标准答案

Java基础八股文 - 面试者心理历程与标准答案 前言:如何应对Java基础面试问题 面试Java基础时,很多候选人会因为紧张而忘记平时熟悉的知识点。本文将从面试者的心理历程出发,教你如何在面试中用自己的思路组织答案,然后给出标准回…

学习笔记088——Windows配置Tomcat自启

1、下载 下载Windows版本tomcat。本文下载的版本是: apache-tomcat-9.0.31-windows-x64.zip 点击下载 注意:要确保bin目录下有 service.bat 文件! 2、配置服务 解压后,终端进入bin⽬录,安装服务:service…

SSL证书怎么配置到服务器上 ?

在网络安全备受关注的当下,SSL证书已成为网站安全的标配。但仅有SSL证书还不够,正确将其配置到服务器上,才能真正发挥保障数据传输安全、验证网站身份的作用。由于服务器类型多样,不同服务器的SSL证书配置方法存在差异&#xff0c…

AI与SEO关键词协同进化

内容概要 人工智能(AI)与搜索引擎优化(SEO)的结合,正深刻变革着关键词策略的制定与执行方式。本文旨在探讨AI技术如何驱动SEO关键词领域的智能化进化,核心在于利用AI强大的数据处理与模式识别能力&#xf…

01.线性代数是如何将复杂的数据结构转化为可计算的数学问题,这个过程是如何进行的

将复杂数据结构转化为可计算的数学问题是数据科学、机器学习和算法设计中的核心环节。这一过程需要结合数据特性、数学理论和计算框架,通过系统化的抽象和建模实现。以下是具体转化流程及关键技术解析: 一、数据结构分析:解构原始数据的本质特征 1. 识别数据类型与结构特性…

华为OD机考-网上商城优惠活动-模拟(JAVA 2025B卷)

import java.util.Scanner;public class Test3 {static int mjq;static int dzq;static int wmkq;static class Group {int price;// 打折后价格int num;// 优惠券使用熟练}public static void main(String[] args) {Scanner scanner new Scanner(System.in);String input sc…

JavaScript 数据处理 - 将字符串按指定位数截断并放入数组(基础实现、使用正则表达式实现、使用正则表达式简化实现)

将字符串按指定位数截断并放入数组 1、基础实现 /*** 将字符串按指定位数截断并放入数组* param {string} str - 要处理的字符串* param {number} n - 每段截断的位数* returns {Array} 截断后的字符串数组*/ function splitStringByLength(str, n) {const result [];for (l…

python学智能算法(十四)|机器学习朴素贝叶斯方法进阶-CountVectorizer文本处理简单测试

【1】引用 前序学习文章中,已经对拉普拉斯平滑和简单二元分类进行了初步探索,相关文章链接为: python学智能算法(十二)|机器学习朴素贝叶斯方法初步-拉普拉斯平滑计算条件概率-CSDN博客 python学智能算法&#xff0…

Java枚举类的规范设计与常见错误规避

前言 在Java开发中,枚举(enum)是一种强大的工具,用于定义一组固定常量集合。然而,许多开发者在使用枚举时容易陷入设计误区,导致代码可维护性差、运行时错误频发,甚至引发生产事故。 一、枚举…

Vue指令v-if

目录 一、Vue中的v-if指令是什么?二、v-if指令的使用 一、Vue中的v-if指令是什么? v-if指令是根据表达值的真假,切换元素的显示和隐藏, 本质是通过操纵dom元素来切换显示状态。 注意: 表达式的值为true,元…

探秘阿里云云数据库Tair:性能、特性与应用全景解析

引言 在数字化浪潮席卷全球的当下,数据已然成为企业最为关键的资产之一,如何高效管理和运用这些数据,成为了企业在激烈竞争中脱颖而出的关键。云数据库作为现代数据管理的核心工具,凭借其卓越的可扩展性、灵活性以及高效的数据处…

百度大模型免费上线,学AI大模型就选近屿智能

3月16日,文心大模型4.5和文心大模型X1正式发布!目前两款模型已免费对用户开放。 文心大模型4.5是百度自主研发的新一代原生多模态基础大模型,通过多个模态联合建模实现协同优化,提高多模态理解能力,精进语言能力&#…

PostgreSQL 中实现跨库连接主要有两种解决方案

方法一:使用 dblink 扩展 dblink 是 PostgreSQL 的内置扩展,允许在一个数据库会话中执行远程 SQL 查询。 步骤 1:在源数据库中启用 dblink 扩展 CREATE EXTENSION IF NOT EXISTS dblink;步骤 2:执行跨库查询 -- 简单查询示例&…

Qt中的布局

Qt6.8的布局管理系统,用于自动排列部件:水平布局QHBoxLayout、垂直布局QVBoxLayout、网格布局QGridLayout、表单布局QFormLayout 布局(layout)是一种优雅而灵活的方式,可以在其容器内自动排列子部件(child widgets)。每个部件通过sizeHint和s…

Agent成本降低46%:缓存规划器的思路模板

论文标题 Cost-Efficient Serving of LLM Agents via Test-Time Plan Caching 论文地址 https://arxiv.org/pdf/2506.14852 作者背景 斯坦福大学 动机 大模型能力的飞速进步催收了大量 AI 智能体应用,它们协调多种模型、工具、工作流来解决实际复杂任务。然而…

Vue 3 + Axios 完整入门实战指南

从入门到深入,手把手教你在 Vue 3 中正确使用 Axios,支持全局挂载、局部分离、使用 proxy 连接场景,适合所有前端小白和实战设计。 大家好,我是石小石!一个热爱技术分享的开源社区贡献者,小册《油猴脚本实战…

CppCon 2017 学习:Effective Qt: 2017 Edition

这段内容讲的是 Qt 容器(Qt Containers)和标准库容器(STL Containers)之间的选择和背景: 主要观点: Qt 容器的历史背景 Qt 自身带有一套容器类(如 QList, QVector, QMap 等)&#…