所以我发现自己经常做如下的模式.代替:
if (map.containsKey(someKey)) {
Value someValue = map.get(someKey);
...
}
为了不遍历地图两次(因为我知道我的地图不存储空值),我会做:
Value someValue = map.get(someKey);
if (someValue != null) {
...
}
这似乎是一个值得的模式,因为地图操作执行了相当数量的操作,我认为优化器不够聪明,不能优化它.
但是,在其他情况下,我发现自己在做类似的模式.例如,我应该将someMethod()结果存储在临时变量中,而不是进行两次调用?显然,如果有副作用,我不能调用someMethod()两次,但从优化的角度来看,只能调用一次是有意义的?
if (someObject.someMethod() != null) {
processSomehow(someObject.someMethod());
}
我知道这个边界是一个“不具建设性”的问题,所以我正在寻找提供一些事实和参考的答案,而不是猜测.
>做什么时候有什么意义,什么时候不做?
>如何评估someMethod()的“成本”,以确定何时应该使用临时变量?
>对于诸如get方法之类的简单方法,这可能会妨碍热点编译器或优化器的实现,并且实际产生效率较低的代码?
对于后代,我不是问“如何提高我现有程序的速度”.我试图弄清楚“我写未来代码时应该使用什么模式”.
感谢任何信息.