首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一if语句中检查状态安全性和评估

在同一if语句中检查状态安全性和评估
EN

Stack Overflow用户
提问于 2017-11-03 11:20:58
回答 1查看 65关注 0票数 1

检查一个条件是否可以被评估,然后在相同的if语句中计算表达式,这是否被认为是一个良好的实践,甚至是安全的?

例如:

代码语言:javascript
复制
int[] values = new int[] { 1, 2, 3, 4 }
int index = 4;
if (index < values.length && values[index] == 4) {
    System.out.println("value is 4")
}

在这个例子中,条件是values[index] == 4,我使用index < values.length来检查调用它是否安全。然而,我在同样的if声明中这样做。这样做可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 11:31:52

是的,这是正确的方法,因为在Java中有称为短路评估(也称为懒惰评估)的机制。这意味着JVM检查第一个条件,如果这是假的,JVM知道无论在第二个条件下是什么结果,它都不会改变任何东西,所以跳过第二个条件。在您的示例中,如果index大于values.length,则整个if语句为false,因此省略了第二个条件。

编辑:

正如咖啡忍者所提到的,按位运算符(&|)和逻辑运算符(&&||)之间存在显著差异。技术上的结果应该是相同的,但按位运算符的评估是急切的,因此双方都进行了。在您的示例中,这可能会导致OutOfBoundException

更重要的是,按位运算符的优先级较低,因此,如果您意外地混合了逻辑运算符和位运算符,则可以接收不同结果

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47094558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档