java - 检查条件安全性并在同一 if 语句中进行评估

标签 java type-safety

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

例如:

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 语句中执行此操作。这样做可以吗?

最佳答案

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

<小时/>

编辑:

Coffee Ninja如上所述,按位运算符(&|)和逻辑运算符(&&||)之间存在显着差异)。从技术上讲,结果应该是相同的,但按位运算符是急切求值的,因此双方都会继续。这可能会导致您的示例中出现 OutOfBoundException
此外,按位运算符的优先级较低,因此如果您不小心混合了逻辑运算符和按位运算符,您可能会收到 different results .

关于java - 检查条件安全性并在同一 if 语句中进行评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094558/

相关文章:

c - 什么时候使用 const void*?

python - Python 中的语义类型安全

c# - C# 中的可区分联合

java - 我们可以有多个数据源到单个数据库吗

c - C 中的类型转换和类型安全

java - 关于第一个索引值的搜索算法错误

Java/JPA - 动态设置对象/实体的属性

c - haskell中的递归数据类型

java - 一对一映射的mappyBy属性创建异常: cannot simultaneously fetch multiple bags

java - 独特地发现客户的最佳方法是什么?