Java 嵌套 if 条件或同一个 if 中的所有条件

Java nested if conditions or all condition in the same if

我有一个循环迭代,其中包含许多这种形式的条件

if (a[k]<=x){
     if(al[k+1]==y){
         if(a[k+2]>=x){
         }
     }
}

在性能方面使用Use the conditions in and in a single if更好吗??

 if ((a[k]<=x) && (al[k+1]==y) && (a[k+2]>=x)){


  }

正如其他人指出的那样,以可读性为目标,不要过早地优化代码。衡量性能,如果您确定这段代码是瓶颈,然后开始更认真地考虑这个问题。

另外如评论中所述,在这种情况下性能可能相同。如果您重新排序谓词,您可能会发现不同的性能特征。类似于:

if(B && A && C)

如果计算 A 成本低且 returns 90% 的时间都是错误的,而计算 B 的成本非常高,您可以改写:

if(A && B && C)

但再次强调,不要从臀部开枪!首先以可读代码为目标,如果您的测量发现性能瓶颈,请考虑以上因素。

实际上,编译器足以 "smart" 将两个代码编译成相同的字节码 java 但是,如果你想要我的意见,第一个更好(因为阅读了很多 if if如果很烦人)。

如果您的循环中有许多像您所说的复杂条件,请考虑将它们移动到小方法中以提高可读性。

// inside loop
if (isValid(x, y, k)) {
}

// use a less generic method name in your code
private boolean isValid(int x, int y, int k) {
    return a[k]<=x && al[k+1]==y && a[k+2]>=x;
}

如果您现在担心这会导致性能下降,那么 JVM 很可能会内联这些方法。