Java逻辑运算符(&&、||)短路机制

2023-12-31

当我阅读一位同事的 Java 代码时,我偶然发现了一大堆 if/else 语句。在这些声明中,有几&& and ||运算符在没有任何括号帮助的情况下互相争斗。我将这些陈述简化为:

if (true || true && false)
  return true;
else
  return false;

你认为结果会是什么?老实说,我以为会是这样false,但似乎短路并没有像我预期的那样工作。在这种情况下,结果是true。短路机制似乎将整个表达式视为true当它发现true紧接着||.

但反过来表达的话,结果又是什么呢?

if (false && true || true)
  return true;
else
  return false;

如果我们遵循同样的逻辑,它应该是错误的。第一个布尔值是false紧接着是&&,但结果是true, 再次。这对我来说是有道理的,但似乎与我们之前的实验不相容。

所以这是我的理论:

如果我们找到一个true其次是||,那么就是true,无论接下来会发生什么,即使后面还有一长串其他逻辑运算符。但如果我们找到一个false其次是&&,它仅短路下一个元素,而不是整个语句。

这是我的问题:

我对吗?对我来说这似乎有点傻。是true比...强大false?


这只是因为

if (false && true || true)

相当于 (&&具有较高的优先级 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)

if ((false && true) || true)

which is

if (false || true)

这是...true.

注:表达式中true || true && false, 那个部分true && false被称为死代码因为它不影响最终的评估结果,因为true || anything总是true.


值得一提的是,存在& and |可以应用于布尔值的运算符,它们很像&& and ||除了它们不会短路,这意味着如果您有以下表达式:

if (someMethod() & anotherMethod())

and someMethod回报false, anotherMethod还是会达到的!但是if不会被执行,因为最终结果将被评估为false.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java逻辑运算符(&&、||)短路机制 的相关文章

  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • 编译器 PDB 文件和链接器 PDB 文件

    我对编译器和链接器之间的区别感到困惑PDB分别文件 即在 Visual Studio 中 Project Properties gt C C gt Output Files gt Program Database File Name vs
  • NSAlert 没有弹跳停靠图标

    如果你提出一个NSAlert当您的应用程序在后台运行时 您的停靠栏图标开始弹跳并持续弹跳 直到您切换回来 我觉得这很烦人 有谁知道如何禁用单个应用程序 创建您自己的 NSApplication 子类 并实现如下所示 int requestU
  • 基于选择动态改变编码中的 Y 轴字段 Vega-Lite

    如何根据选择动态更改为 y 轴编码的数据字段 我正在尝试构建一个可视化来显示一天 24 小时内的事件计数数据 并且我希望用户能够选择不同的时区 例如 EST CST MST 或 PST 为此 我构建了一个单一选择 在其中指定上面括号中列出的
  • ON 子句中另一个未知列名错误

    Query SELECT c title AS title c introtext AS body c state AS state c created AS created c created by AS uid c modified A
  • 在 Google Colab 中使用笔记本电脑网络摄像头进行实时 YOLO 对象检测

    我正在使用网络摄像头在本地系统上使用 YOLOv3 和 OpenCV 进行实时对象检测 一切都像魅力一样运作链接在这里 https github com pdhruv93 YOLO Object Detection blob master
  • CS231n:如何计算Softmax损失函数的梯度?

    我正在观看斯坦福 CS231 用于视觉识别的卷积神经网络的一些视频 但不太明白如何使用计算 softmax 损失函数的解析梯度numpy From 这个堆栈交换 https math stackexchange com questions
  • Video.js 具有空源

    无论如何 我可以放置 video js 而无需在视频标签上设置源吗 Video js 启动时没有源而失败 我想放置没有源的 video js 并从 js api 层设置源 同样的问题 但没有人回答 VideoJS 没有源码吗 https s
  • Angular PWA 不会在生产环境中更新

    我在 Angular 8 中有一个 PWA 我添加了 ng add angular pwa 并且 PWA 功能似乎可以工作 接受这个问题 当我将新版本推送到生产时 该应用程序是not在人们的浏览器上进行了更新 在 Chrome 和移动 Sa
  • 交易延长时段

    什么是 扩展会话反模式 延长 或长 会话 或每个会话的会话数 是一个可能在事务持续时间之外存在的会话 与事务范围内的会话相反 或每个请求的会话数 这不一定是反模式 这是一种实现方式长时间的谈话 即与数据库的对话跨越多个事务 这只是anoth
  • 目前进行并行下载最舒适、最可靠的跨平台 Perl 模块是什么?

    我将不得不通过简单地在 URL 上发布并获取 XML 作为回报来下载许多数据集 我可以通过一次执行多个请求来加快这一速度 但问题是 它需要在 Windows 和 Linux 上运行 所以线程和叉子都出局了 因为这纯粹是 IO 绑定的 所以我
  • 如何在 BroadcastReceiver 中添加 Snackbars?

    快捷栏通过在屏幕底部显示简短消息来提供有关操作的轻量级反馈 快捷栏可以包含一个操作 Android 还提供了一个 toast 主要用于系统消息传递 Toast 与 Snackbar 类似 但不包含操作 也不能滑出屏幕 我的问题 import
  • “auto it = unordered_map.find(key)”的推导类型?

    随着 C 11 的出现 我们有 unordered map cbegin cend 来专门返回 const iterator 的值 所以表达式 auto it unordered map cbegin 中 it 的推导类型是const it
  • 宏执行 fgets 剥离换行符

    给出以下两个要使用的语句fgets并去掉换行符 puts Enter the name fgets temp name 40 stdin temp name strcspn temp name n 0 下面的宏足以代替这个吗 define
  • 在mysql中计算5分钟间隔的平均值

    我有一张桌子log有柱子id myValue myCategory and myTimestamp 假设表是这样填充的 ID MYVALUE MYCATEGORY MYTIMESTAMP 1 10 1 2010 11 1 10 00 00
  • 如何获取所有终端节点 - r 中的权重和响应预测“ctree”

    这是我可以用来列出所有终端节点的权重的方法 但是如何添加一些代码来获取响应预测以及每个终端节点 ID 的权重 说我希望我的输出看起来像这样 以下是我迄今为止获得的重量 nodes airct unique where airct 谢谢 二叉
  • PHP 缓存 - 保存在数据库中还是创建文件更快?

    我目前正在缓存动态生成的 PHP 页面 方法是将它们保存到带有到期时间字段的数据库中 如果再次请求该页面 程序会检查是否有未过期的缓存版本的页面可供使用 并且仅在找不到页面时才重新生成该页面 这很有效 但是将缓存的页面保存为文件而不是保存到
  • ng test --code-coverage 不打印覆盖率详细信息

    当我使用运行测试时ng test code coverage我得到的代码覆盖率为未知 不确定可能出了什么问题 感谢这里的任何帮助 gt ng test code coverage 10 building modules 1 1 module
  • 在单页 Clojure Web 应用程序中使用 Friend 进行身份验证和授权

    我正在尝试将好友身份验证和授权集成到 Clojure Compojure 单页 Web 应用程序中 我有一个由 Angular 控制器支持的登录表单 该控制器使用 AJAX 针对 Web 应用程序验证用户名和密码 并获取经过身份验证的用户记
  • 如何将值从 ui-gmap-windows InfoWindow/Marker 传递到 ui-sref?

    我正在尝试使用 angular google maps 模块在 Google 地图上的 InfoWindow 内创建链接ui gmap windows 在我的 HTML 模板中 我有
  • Java逻辑运算符(&&、||)短路机制

    当我阅读一位同事的 Java 代码时 我偶然发现了一大堆 if else 语句 在这些声明中 有几 and 运算符在没有任何括号帮助的情况下互相争斗 我将这些陈述简化为 if true true false return true else