检查一个条件是否可以被评估,然后在相同的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声明中这样做。这样做可以吗?
发布于 2017-11-03 11:31:52
是的,这是正确的方法,因为在Java中有称为短路评估(也称为懒惰评估)的机制。这意味着JVM检查第一个条件,如果这是假的,JVM知道无论在第二个条件下是什么结果,它都不会改变任何东西,所以跳过第二个条件。在您的示例中,如果index大于values.length,则整个if语句为false,因此省略了第二个条件。
编辑:
正如咖啡忍者所提到的,按位运算符(&、|)和逻辑运算符(&&、||)之间存在显著差异。技术上的结果应该是相同的,但按位运算符的评估是急切的,因此双方都进行了。在您的示例中,这可能会导致OutOfBoundException。
更重要的是,按位运算符的优先级较低,因此,如果您意外地混合了逻辑运算符和位运算符,则可以接收不同结果。
https://stackoverflow.com/questions/47094558
复制相似问题