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

时间:2017-11-03 11:20:59

标签: 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语句中这样做。这样做可以吗?

1 个答案:

答案 0 :(得分:2)

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

编辑:

正如Coffee Ninja所述,位运算符(&|)和逻辑运算符(&&||)之间存在显着差异。技术上结果应该是相同的,但是逐位运算符的评估是急切的,所以双方都要进行。这可能会导致您的示例中出现OutOfBoundException  更重要的是,按位运算符的优先级较低,因此如果您不小心混合逻辑运算符和按位运算符,则可以接收different results