我有一个包含这种形式的许多条件的循环迭代
if (a[k]<=x){
if(al[k+1]==y){
if(a[k+2]>=x){
}
}
}
更好的使用在性能方面使用条件和单个if?
if ((a[k]<=x) && (al[k+1]==y) && (a[k+2]>=x)){
}
答案 0 :(得分:2)
正如其他人所指出的那样,目标是提高可读性并且不要过早地优化代码。衡量性能,如果您认为这段代码是瓶颈,那么就开始更认真地考虑这个问题。
同样如评论中所述,在这种情况下,表现可能会相同。如果重新排序谓词,可能会发现不同的性能特征。类似的东西:
if(B && A && C)
如果计算A很便宜并且90%的时间都返回假,并且计算B非常昂贵,你可以写一下:
if(A && B && C)
但是再次,不要从臀部射击!首先针对可读代码,如果您的测量确定了性能瓶颈,那么请考虑以上内容。
答案 1 :(得分:0)
实际上,编译器足够“智能”将两个代码编译为相同的字节码java但是,如果你想要我的意见,那么第一个更好(因为如果烦恼的话,阅读很多)。
答案 2 :(得分:0)
如果您的循环中有许多复杂的条件,请考虑将它们转换为小方法以提高可读性。
// 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很可能会内联这些方法。