《Java 7程序设计入门经典》一2.9 具有“短路”功能的逻辑运算符

简介: 本节书摘来自华章出版社《Java 7程序设计入门经典》一书中的第2章,第2.9节,作者(美)Herbert Schildt Dale Skrien,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.9 具有“短路”功能的逻辑运算符

Java为AND和OR逻辑运算符提供了具有“短路”功能的版本,来用于编写更有效率的代码。为了了解其原因,考虑以下情形:在一个与操作中,若第一个操作数是假的,无论第二个操作数是什么,结果总是假的。在一个或操作中,若第一个操作数是真的,无论第二个操作数的值是什么,结果总是真的。于是,在以上两种情况下,没有必要考虑第二个操作数。通过不考虑第二个操作数,节约了时间,代码更加有效。
具有“短路”功能的AND运算符是&&,具有“短路”功能的OR运算符是||。与其对应的普通版本分别是&和|。在普通版本和“短路”版本的唯一区别在于普通版本总对每个变量都予以考虑,而“短路”版本只在需要时考虑第二个变量。
下面的程序演示了短路AND运算符的用法。程序判定变量d的值是否是变量n的值的因子。通过取求模操作来完成判别。如果n/d的余数是0,那么d就是因子。但是,由于去求模运算符涉及除法,因此用“短路”形式的与运算符来防止除以0的错误。
image

为了防止除以0带来的错误,if语句首先检查变量d是否等于0。若等于0,“短路”与在此停止,不再执行取模操作。所以在第一个测试中,d是2,且执行了取模操作。第二个测试失败了,是因为d已设置为0,跳过了取模操作,防止了除以0带来的错误。最后的测试试图使用普通的与运算符。这使两个操作数都会考虑,导致了在除以0时发生了运行时错误。
最后提一点:Java的正式规范中把具有“短路”功能的运算符称为条件与(conditional-or)运算符或条件或(conditional-and)运算符。但也常使用“具有‘短路’功能的运算符”这个术语。
image

image

相关文章
|
1月前
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
【4月更文挑战第6天】`ReentrantLock`是Java并发编程中一个强大的同步工具,比`synchronized`提供更丰富功能。它支持可响应性、可中断性、公平性选择及条件变量。通过示例展示了创建、公平性设置、可中断锁定、尝试锁定及条件变量的使用。`ReentrantLock`使线程同步更灵活,适用于高性能应用,但使用需谨慎,理解其原理并恰当使用。
|
10天前
|
存储 前端开发 搜索推荐
13:Session机制实现用户登录与注销功能-Java Web
13:Session机制实现用户登录与注销功能-Java Web
25 3
|
10天前
|
安全 前端开发 Java
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
24 3
|
10天前
|
存储 监控 Java
如何在Java中实现等待文件修改后再读取数据的功能?
如何在Java中实现等待文件修改后再读取数据的功能?
18 0
|
12天前
|
Java API 数据安全/隐私保护
【亮剑】如何在Java项目中结合Spring框架实现邮件发送功能
【4月更文挑战第30天】本文介绍了如何在Java项目中结合Spring框架实现邮件发送功能。首先,需在`pom.xml`添加Spring和JavaMail依赖。然后,在`applicationContext.xml`配置邮件发送器,包括SMTP服务器信息。接着,创建一个使用依赖注入的`EmailService`类,通过`JavaMailSender`发送邮件。最后,调用`EmailService`的`sendSimpleEmail`方法即可发送邮件。最佳实践包括:使用配置管理敏感信息,利用`MimeMessage`构造复杂邮件,异常处理和日志记录,以及在大量发送时考虑使用邮件队列。
|
13天前
|
IDE Java 开发工具
基于Java程序设计的实验教学方法优化与实践
基于Java程序设计的实验教学方法优化与实践
22 1
|
13天前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之DataWorks在调用java sdk的createFile功能时报错com.aliyuncs.exceptions.ClientException: 1201111000 如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
12 1
|
17天前
|
缓存 Java 测试技术
Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能
Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能
|
17天前
|
Java API
java流式实现chatGPT会话功能
java流式实现chatGPT会话功能
24 1
|
18天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式