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 很可能会内联这些方法。
我有一个循环迭代,其中包含许多这种形式的条件
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 很可能会内联这些方法。