讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java里逻辑运算符是如何工作的_Java布尔运算规则说明

浅辰君_1528

浅辰君_1528

发布时间:2026-01-29 09:49:07

|

669人浏览过

|

来源于php中文网

原创

Java中&&和||是短路运算符,左边结果能确定整体真假时跳过右边执行;&和|非短路,仅在必须执行右边副作用时使用;!优先级高,易出错,应加括号明确逻辑。

在java里逻辑运算符是如何工作的_java布尔运算规则说明

Java中&&和||为什么有时不执行右边表达式

因为它们是“短路运算符”——一旦左边结果已能确定整个表达式的真假,右边就直接跳过。这不是优化技巧,而是Java语言规范强制行为。

  • &&:左边为 false → 整个结果必为 false,右边不执行(比如 obj != null && obj.getName().length() > 0 中,obj 为 null 时不会触发空指针)
  • ||:左边为 true → 整个结果必为 true,右边不执行(比如 user.isAdmin() || user.hasPermission("edit"),管理员身份已满足时,权限检查不触发)
  • 误用 & 或 | 替代 &&/|| 会导致副作用意外执行(如 i++ > 0 被多算一次)

什么时候必须用&或|而不是&&/||

仅当右边表达式有**必须发生**的副作用,且你明确需要它被执行时才考虑非短路版本。

  • 典型场景极少:单元测试中验证方法是否被调用、日志埋点、资源清理逻辑等
  • 例如:logAttempt() & validateInput() 确保日志先打,再校验;但更推荐拆成两行,语义更清晰
  • 在布尔上下文中用 &/| 属于反模式,可读性差,IDE通常会警告

!运算符的常见误用陷阱

! 只作用于紧邻的单个操作数,优先级高于 && 和 ||,极易因括号缺失导致逻辑翻车。

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • 错误写法:!a && b 实际等价于 (!a) && b,但若本意是 !(a && b),结果完全相反
  • 涉及关系表达式时尤其危险:!x == y 会被解析为 (!x) == y,而 x 是 int 类型 → 编译失败(不能对数字取非)
  • 安全做法:所有复合条件加括号,如 !(x > 0 && y ,避免依赖优先级记忆

逻辑运算符和位运算符在布尔值上的行为差异

表面上看 && 和 & 对布尔值结果一致,但语义和执行逻辑完全不同。

立即学习“Java免费学习笔记(深入)”;

  • && 是逻辑运算符,只接受布尔操作数,支持短路,用于流程控制
  • & 是位运算符,重载后可用于布尔值,但无短路,且允许整数参与(如 5 & 3)
  • 混用会破坏代码意图:用 & 写条件判断,别人第一反应是“你在做位掩码”,不是“你在做逻辑与”
  • 编译器不会阻止,但静态检查工具(如 SonarQube)会标记为 bug 级别问题
短路特性不是“锦上添花”,而是防止崩溃的基础设施;而把 ! 和关系运算符连写不加括号,是新人和老手都高频踩坑的点——它不报错,但逻辑已悄然反转。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

529

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1678

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5904

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2604

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1672

2025.10.17

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5679

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2825

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

3548

2025.08.29

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn