它是否被认为是一种良好的做法,甚至可以安全地检查是否可以评估一个条件,然后在相同的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语句中这样做。这样做可以吗?
答案 0 :(得分:2)
是的,这是正确的方法,因为在Java中存在称为短路评估的机制(也称为懒惰评估)。这意味着JVM检查第一个条件,如果这是假的,JVM知道无论第二个条件是什么结果它都不会改变任何东西,所以跳过第二个条件。在您的示例中,如果index
大于values.length
,则整个if语句为false,因此省略第二个条件。
编辑:
正如Coffee Ninja所述,位运算符(&
,|
)和逻辑运算符(&&
,||
)之间存在显着差异。技术上结果应该是相同的,但是逐位运算符的评估是急切的,所以双方都要进行。这可能会导致您的示例中出现OutOfBoundException
更重要的是,按位运算符的优先级较低,因此如果您不小心混合逻辑运算符和按位运算符,则可以接收different results。