【Java】逻辑运算符详解:、|| 与、 | 的区别及应用
文章目录
- 💯前言
- 💯一、基本概念与运算符介绍
- 💯二、短路与与非短路与:&& 与 & 的区别
- 1. `&&`:短路与(AND)
- 2. `&`:非短路与(AND)
- 💯三、短路或与非短路或:|| 与 | 的区别
- 1. `||`:短路或(OR)
- 2. `|`:非短路或(OR)
- 💯四、总结:什么时候使用短路与非短路运算符
- 💯五、拓展:短路与非短路运算符的副作用
- 💯六、结论
💯前言
- 在 Java 编程中,逻辑运算符是非常常见且重要的组成部分。它们主要用于布尔值的操作,帮助我们进行条件判断与控制流程。而 Java 中常见的逻辑运算符包括 与(AND) 和 或(OR) 运算符,分别有短路与非短路版本。对于开发者而言,理解这些运算符的工作机制及其应用场景,能够提升代码的效率、可读性与可维护性。本篇文章将深入探讨 Java 中的
&&
、&
、||
和|
这四种运算符,分析它们的不同特点、使用场景以及对程序执行效率的影响。
Java
💯一、基本概念与运算符介绍
在 Java 中,逻辑运算符通常用于布尔类型的数据,执行真或假的判断。常见的逻辑运算符有四种,它们分别是:
&&
:短路与(AND)&
:非短路与(AND)||
:短路或(OR)|
:非短路或(OR)
这四个符号看似相似,但它们在计算表达式时的行为有所不同,尤其是在优化执行效率和避免不必要计算方面。
💯二、短路与与非短路与:&& 与 & 的区别
1. &&
:短路与(AND)
&&
是 Java 中的短路与运算符。短路意味着在逻辑计算中,当第一个操作数已经决定了整个表达式的结果时,第二个操作数不会再被计算。例如,当表达式的左边为 false
时,无论右边是什么,整个 &&
运算的结果都会是 false
,因此右边的表达式无需计算。
例子:
if (false && someMethod()) {// someMethod() 不会被调用
}
在这个例子中,由于 false && ...
的结果总是 false
,Java 不再执行 someMethod()
方法。短路特性避免了不必要的计算和副作用,因此它比非短路运算符更加高效。
适用场景:
短路与运算符通常用于检查多个条件,其中某个条件的结果能够决定整个表达式的值,特别适合在多个条件判断时用作优化。
2. &
:非短路与(AND)
与 &&
相对的是 &
运算符,它是非短路与运算符。不论左边的表达式是否能决定整个条件结果,右边的表达式都会被计算。即使左边的结果已经可以确定整个条件的结果,右边的部分依然会被求值。
例子:
if (false & someMethod()) {// someMethod() 会被调用
}
在这个例子中,虽然 false & ...
的结果一定是 false
,但 someMethod()
依然会被调用。&
运算符常常用于位运算,或者在需要强制评估两侧操作数的场景中。
适用场景:
- 在位运算中使用
&
。 - 当需要确保表达式两边都被评估时使用,例如在某些副作用操作中。
💯三、短路或与非短路或:|| 与 | 的区别
1. ||
:短路或(OR)
||
是 Java 中的短路或运算符。它的特性是,当左边的操作数已经为 true
时,整个表达式的结果已经可以确定为 true
,此时右边的操作数不会被计算。
例子:
if (true || someMethod()) {// someMethod() 不会被调用
}
在这个例子中,由于 true || ...
的结果总是 true
,因此 someMethod()
不会被调用。这个特性可以有效提高程序执行的效率,避免不必要的计算。
适用场景:
- 条件判断时,前面的条件可以快速决定整个表达式结果的情况。
- 当右边的表达式包含昂贵的操作或有副作用时,可以避免不必要的执行。
2. |
:非短路或(OR)
与 ||
对应的是 |
,它是非短路或运算符。不论左边的操作数是否为 true
,右边的操作数都会被计算。
例子:
if (true | someMethod()) {// someMethod() 会被调用
}
在这个例子中,尽管 true | ...
总是 true
,someMethod()
仍然会被调用,因为 |
会强制计算右边的操作数。
适用场景:
- 在位运算中使用
|
。 - 当需要确保两个操作数都被评估时,尤其是右边的操作有副作用时使用。
💯四、总结:什么时候使用短路与非短路运算符
理解短路与非短路运算符的区别,能够帮助我们在编程中做出更合适的选择,避免不必要的计算,提高程序效率。总结如下:
-
使用
&&
和||
:这两个运算符具有短路特性,能够优化代码性能,特别是当右侧操作数可能是昂贵的运算或带有副作用时。它们最常用于条件判断。 -
使用
&
和|
:这两个运算符不会短路,即使左边的操作数足以确定结果,右边的操作数仍然会被计算。&
和|
更常用于位运算,或者当我们需要强制计算两侧的操作数时使用。
💯五、拓展:短路与非短路运算符的副作用
在实际编程中,右侧操作数的副作用是一个需要特别注意的地方。例如,假设我们有如下代码:
boolean result = (someCondition() || expensiveOperation());
如果 expensiveOperation()
是一个昂贵的计算或操作,且我们不希望它在 someCondition()
为 true
时被执行,那么使用短路或 ||
运算符是合适的,它可以在 someCondition()
为 true
时直接跳过 expensiveOperation()
。然而,如果我们使用非短路或 |
,即使 someCondition()
为 true
,expensiveOperation()
仍然会被执行,这可能会导致性能问题或不必要的副作用。
💯六、结论
Java 中的逻辑运算符 &&
、&
、||
和 |
在功能上各有不同,其中短路运算符(&&
和 ||
)能够提升代码的执行效率,避免不必要的计算和副作用,而非短路运算符(&
和 |
)则常用于位运算,或在需要强制计算两侧表达式时使用。理解这些运算符的区别和使用场景,能够帮助我们写出更加高效、清晰和可维护的代码。
希望本文对你理解 Java 中的逻辑运算符有所帮助,能够在实际编程中做出更精确和高效的决策。
相关文章:

【Java】逻辑运算符详解:、|| 与、 | 的区别及应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯一、基本概念与运算符介绍💯二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. …...
深入解析 Flutter GetX
深入解析 Flutter GetX:从原理到实战 GetX 是 Flutter 中一个轻量级且功能强大的状态管理、路由管理和依赖注入框架。它以简单、快速、高效著称,适合从小型到大型项目的开发需求。GetX 的设计理念是一体化解决方案,通过一个框架解决状态管理…...

Java 大视界 -- 人才需求与培养:Java 大数据领域的职业发展路径(92)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

顺序表常用操作和笔试题
1、顺序表的常用操作 1.1 顺序表的创建 如下代码所示:创建了一个默认空间为10的整型顺序表,如果空间不足则会以1.5倍扩容。 List<Integer> list new ArrayList<>(); 创建一个空间为15的整型顺序表 List<Integer> list2 new ArrayL…...
List<Map<String, Object>> 如何对某个字段求和
在Java中,如果你有一个List<Map<String, Object>>的结构,并且你想要对某个特定字段进行求和,你可以使用Java 8的Stream API来简化这个过程。下面是一个示例代码,演示如何对某个字段进行求和。 假设你有一个List<M…...
2024亚马逊数据分析!
整体财务数据23 净销售额:全年净销售额达 6380 亿美元,同比增长 11%。 净利润:全年净利润为 592 亿美元,较上年同期的 304 亿美元增长 95%。 经营活动现金流:经营活动现金流达 1159 亿美元,同比增加了 36…...

foobar2000设置DSP使用教程及软件推荐
foobar2000安卓中文版:一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式,包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐,foobar2000都能完美播放。除此之…...
Apache Logic4j 库反序列化漏洞复现与深度剖析
前言 在渗透测试领域,反序列化漏洞一直是安全研究人员和攻击者关注的焦点。今天,我们将深入探讨 Apache Logic4j 库中的反序列化漏洞,详细了解其原理,并进行完整的复现演示。 一、漏洞原理 Apache Logic4j 库在处理对象的反序列…...

FPGA VIVADO:axi-lite 从机和主机
FPGA VIVADO:axi-lite 从机和主机 TOC在这里插入代码片 前言 协议就不详细讲解了,直接看手册即可。下面主要如何写代码和关键的时序。 此外下面的代码可以直接用于实际工程 一、AXI-LITE 主机 数据转axi lite接口: 读/写数据FIFO缓存 仲裁:…...

LabVIEW 中的 3dgraph.llb库
3dgraph.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录下,是 LabVIEW 系统里用于 3D 图形相关操作的关键库。它为 LabVIEW 用户提供众多功能,可在应用程序内创建、显示和交互各类 3D 图形,极大增…...

【Linux】文件系统:文件fd
🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.回顾C文件接口02.系统文件I/O02.1 openflags 参数(文件打开模式)标记位传参1. 访问模式(必须指定一个)2. 额外控制标志…...
Vue学习记录19
TransitonGroup <TransitionGroup> 是一个内置组件,用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。 和 <Transtion> 的区别 <TranstionGroup> 支持和 <Transtion> 基本相同的 props、CSS过渡 class 和 JavaScript…...

MATLAB更改图论的布局:设置layout
在图论那一章,我们讲过最小生成树和单源最短路径(见:从零开始学数学建模): 以最短路径那节课为例,把绘图pplot那部分代码写为: % plot绘图有很多参数可以设置,使图尽量美观 P plot…...

【分果果——DP(困难)】
题目 分析 分果果题解参考,下面是补充https://blog.csdn.net/AC__dream/article/details/129431299 关于状态 设f[i][j][k]表示第i个人取到的最后一个糖果编号是j,第i-1个人取到的最后一个糖果编号小于等于k时的最大重量的最小值 关于转移方程 关于 j …...

禁止WPS强制打开PDF文件
原文网址:禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR,输入:regedit,回车。找到:HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…...

罗技鼠标接收器丢了,怎么用另一个logi接收器重新配对?
1.首先接收器得是logi的,其次看这个接收器是什么类型的,一共有以下3种。(这几种接收器都可以给其他logi鼠标用) 下图左侧带红标的这个(标可能带颜色或者是透明,都一样),叫多设备接收…...
ffmpeg configure 研究2:分析屏幕输出及文件输出的具体过程
author: hjjdebug date: 2025年 02月 17日 星期一 16:57:55 CST description: ffmpeg configure 研究2 分析屏幕输出及文件输出的具体过程 文章目录 0. 执行./configure 命令1. sed: cant read 信息是从哪里来的 ?1.1 find_filters_extern()1.2 find_things_extern() 2. 屏幕输…...

软件内有离线模型,效果也很实用......
今天给大家带来一款超实用的图片画质增强软件,完全不需要联网,随时随地都能用。 图片画质增强 一键增强画质 使用起来也超简单,完全不需要安装。 软件主要有两个功能:图片增强和视频增强。 在使用之前,先确定一下输出…...

Linux下ioctl的应用
文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctl(input/output control)是Linux中的一个系统调用,主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/…...
如何通过 prometheus-operator 实现服务发现
在之前的章节中,我们讲解了如何编写一个自定义的 Exporter,以便将指标暴露给 Prometheus 进行抓取。现在,我们将进一步扩展这个内容,介绍如何使用 prometheus-operator 在 Kubernetes 集群中自动发现并监控这些暴露的指标。 部署应用 在 Kubernetes 集群中部署我们的自定…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...

VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...