短路与非短路操作员

2023-11-22

我理解下面的区别(至少对于Java):

if( true || false ) // short-circuiting boolean operator
if( true | false )  // non-short-circuiting boolean operator

但我的问题是,当您处理布尔表达式时,有什么理由使用非短路运算符?是否有一些性能优势或用途不会被视为不好的做法?


您可能想要使用非短路运算符的原因之一是您是否在某种程度上依赖于函数的副作用。例如。

boolean isBig(String text) {
  System.out.println(text);
  return text.length() > 10;
}

...
if( isBig(string1) || isBig(string2) ){
   ...
}

如果你不关心是否println执行后,您应该使用上面的短路操作。但是,如果您希望始终打印两个字符串(因此取决于副作用),那么您需要使用非短路运算符。

实际上,您几乎总是想使用短路运算符。依赖表达式中的副作用通常是不好的编程习惯。

一个例外是非常低级别或性能敏感的代码。短路运算符可能会稍微慢一些,因为它们会导致程序执行中出现分支。此外,使用按位运算符允许您将 32 或 64 个并行布尔运算作为单个整数运算执行,速度非常快。

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

短路与非短路操作员 的相关文章

  • 我可以确定谁在调用 Java 中的函数或实例化类吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在Java中 如何使用堆栈跟踪或反射找到方法的调用者 https stackoverflow com questions 421280 in java how do i find the caller
  • Mongo 可审核的 ZonedDateTime 字段在 Spring Boot 2 中不起作用

    在 Spring Boot 项目中 我使用 CreatedDate 之类的注释来保存有关创建 更新相应文档的日期的信息 整个项目都使用 ZonedDateTime 因此带注释的字段也是 ZonedDateTime 为了实现 Mongo 的日
  • 检查发送到网页的请求数

    我正在编写一个 Java 多线程应用程序 它可以访问不同 Web 服务器的数百万个 有时甚至数十亿个 URL 这个想法是检查这些 URL 是否给出有效的 200OK 响应或 404 其他代码 我如何知道我的程序是否不会在他们的服务器上造成高
  • Java 流 - 按嵌套列表分组(按第二顺序列出)

    我有以下数据结构 每个学生都有一个州列表 每个州都有一个城市列表 public class Student private int id private String name private List
  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • 在java中将DataURL图像转换为图像文件

    我在我的 java servlet 中接收图像 DataURL 它看起来像 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAA 我需要将其另存为图像文件 我该怎么做 The simplest w
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • 无法自动装配 org.springframework.mail.javamail.JavaMailSender

    尝试运行我的应用程序时遇到以下问题 所有的东西都调试过了 还是一无所获 IDE 毫无问题地找到了 bean 所以我对这里发生的情况感到非常困惑 SEVERE Exception sending context initialized eve
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t

随机推荐

  • 传递配置参数以在 R 中安装包

    我正在尝试安装一个包R来自 CRAN 存储库 我必须在配置阶段 但我不知道如何做到这一点install packages gt install packages Rmpfr checking mpfr h usability no chec
  • 在 Vue.js 中,如何查找哪些数据更改导致组件重新渲染?

    在 Vue js 中 当某些数据发生变化时 组件会重新渲染 更新 有时重新渲染频率太频繁 我想找出哪些数据的更改导致了此重新渲染 如何找出导致重新渲染的更改数据 Using 深度差异和一个简单的观察程序 您可以轻松找到虚拟机数据的先前副本之
  • 为什么“tail”不能截断日志文件?

    我正在尝试使用 cron 脚本管理日志文件大小 我基本上想每晚删除日志文件中除最后 2000 行之外的所有内容 我正在尝试运行此命令 但它似乎正在清空整个文件而不是执行我想要的操作 tail 2000 日志文件 txt gt 日志文件 tx
  • CakePHP 数据库表,缺少默认数据源

    I found this类似的问题 但我的问题不同 我将 CakePHP 2 2 应用程序移至另一台服务器 迁移前不存在任何问题 迁移后大多数事情都运行良好 我可以访问我的大部分数据库表等 但是当我尝试访问我的其中一个表时 我收到此错误 E
  • 将 Sqlite BigInt 转换为日期

    我有一个 Sqlite 数据库 用作 Quartz net 调度程序作业的 ado net 作业存储 在一个表中 名为 START TIME 的列的类型为 big int 有没有办法将 bigint 转换或转换为日期值 我希望能够查询数据库
  • JSON - 无法使用 Jackson 序列化对象内的 JSONObject

    我有以下课程 class A String abc String def appropriate getters and setters with JsonProperty Annotation 我打电话给Jacksons objectMa
  • 如何防止未启用的 EditText 出现键盘

    我的活动有一个EditText据称 在用户单击屏幕的编辑按钮之前 该内容是不可编辑的 I did edit setEnabled false 但仍然会为用户显示一个键盘 并且可以将值添加到EditText通过键盘在屏幕上显示 即使屏幕可能看
  • json -c json_object_to_json_string 释放内存时

    我正在使用 json c 库将 json object 发送到客户端 我注意到没有本机函数来释放 json object to json string 分配的内存 该库会自动释放它吗 或者我必须 free str 以避免内存泄漏 我试图阅读
  • 服务定位器、依赖注入(和容器)和控制反转

    我已经编程有一段时间了 但从来没有兴趣从理论上了解每个概念的含义 我可能正在使用各种编程概念 但我并不知道 服务定位器 对我来说 指的是通过减少代码量来加快开发速度的捷径记录 一个问题是 定位器可以仅引用名称空间 类 或者我可以拥有变量注册
  • 从 Enum 中的类初始化一个新对象

    我有一个名为 Plugins 的枚举 public enum Plugins ROTATING LINE plugin rotatingline RotatingLine class SNOW SYSTEM plugin snow Snow
  • Selenium 仅在使用无头 Chrome 时无法定位元素(Python)

    我刚刚开始学习 Selenium 需要使用云中的 jenkins 机器验证登录网页 该机器没有 GUI 我设法在具有 UI 的系统上成功运行该脚本 然而 当我修改脚本以无头运行时 它失败说无法定位元素 我的脚本如下 usr bin env
  • 如何在 Thymeleaf 中执行 if-else 操作?

    做一个简单的最好方法是什么if else在百里香叶 我想在 Thymeleaf 中实现相同的效果
  • Apache ProxyPass 和会话

    因此 我使用 Apache 将特定文件夹代理到 Glassfish 实例 我的conf中的规则是 ProxyPass folder http localhost 28083 ProxyPassReverse folder http loca
  • Windows 禁止文件和文件夹名称的完整列表

    在 Windows 上 禁止使用 com1 txt 或 lpt1 txt 等文件名 是否有 Windows 上所有禁止的文件和文件夹名称的列表 或文件和文件夹名称中的禁止字符 例如 无效字符列表为 gt 大于 冒号 双引号 正斜杠 反斜杠
  • 如何重写WebServiceHostFactory MaxReceivedMessageSize?

    那里有很多类似的问题 但我已经尝试了每个问题中的每一种解决方案都无济于事 我们有一个使用 WebServiceHostFactory 初始化的 Web 服务 但如果向其抛出超过 64k 的数据 我们会收到 400 错误请求 通常 只需增加
  • 在 Angular 2 中打印 Html 模板(Angular 2 中的 ng-print)

    我想在 Angular 2 中打印 HTML 模板 我已经对此进行了探索 我在 AngularJS 1 中得到了解决方案在 Angularjs 中打印 Html 模板 1 任何建议将不胜感激 这就是我在 angular2 中所做的 它类似于
  • Django 对“MEDIA_ROOT”做了什么?

    Django 是做什么的MEDIA ROOT确切地 我一直不明白 由于 Django 本身不提供静态媒体 并且您必须为其设置 apache 或类似的东西 为什么它关心它位于哪个目录 您不是唯一一个想知道的人 查看姜戈票 10650 根据 D
  • 确定当前文本选择包含哪些 DOM 元素

    我希望能够找出用户当前在浏览器中选择的文本中存在哪些 DOM 元素 document getSelection 将为我们获取当前选定的文本 但是我们如何确定该文本选择中包含哪些 DOM 元素呢 window getSelection 给你一
  • 如何为设置包(Root.plist)的文本字段提供占位符

    我想为设置包 Root plist 的文本字段提供占位符 是否可以 如果可以 如何 提前致谢 恐怕目前这是不可能的 我也试图这样做 但似乎找不到任何可行的解决方案 如果有帮助 应该放置此内容的官方文档是here
  • 短路与非短路操作员

    我理解下面的区别 至少对于Java if true false short circuiting boolean operator if true false non short circuiting boolean operator 但我