【发布时间】:2016-05-08 16:52:01
【问题描述】:
假设我有以下代码:
private Rule getRuleFromResult(Fact result){
Rule output=null;
for (int i = 0; i < rules.size(); i++) {
if(rules.get(i).getRuleSize()==1){output=rules.get(i);return output;}
if(rules.get(i).getResultFact().getFactName().equals(result.getFactName())) output=rules.get(i);
}
return output;
}
是保持原样还是按如下方式更改它更好:
private Rule getRuleFromResult(Fact result){
Rule output=null;
Rule current==null;
for (int i = 0; i < rules.size(); i++) {
current=rules.get(i);
if(current.getRuleSize()==1){return current;}
if(current.getResultFact().getFactName().equals(result.getFactName())) output=rules.get(i);
}
return output;
}
执行时,程序每次都通过 rules.get(i) 就好像它是第一次一样,我认为,在更高级的示例中(比如说第二个 if)它需要更多的时间和减慢执行速度。我说的对吗?
编辑:一次回答几个 cmets:我知道在这个特定的例子中,时间增益会非常小,但这只是为了得到一般的想法。我注意到我往往有很长的行 object.get.set.change.compareTo... 等等,其中许多重复。在整个代码的范围内,时间增益可能很重要。
【问题讨论】:
-
但是,在 for 循环之外声明
current会带来 no 性能提升。如果变量仅在单个代码块内使用,则其定义应位于该代码块中。