在下面的代码中我们进行调用listType.getDescription()
twice:
for (ListType listType: this.listTypeManager.getSelectableListTypes())
{
if (listType.getDescription() != null)
{
children.add(new SelectItem( listType.getId() , listType.getDescription()));
}
}
我倾向于重构代码以使用单个变量:
for (ListType listType: this.listTypeManager.getSelectableListTypes())
{
String description = listType.getDescription();
if (description != null)
{
children.add(new SelectItem(listType.getId() ,description));
}
}
我的理解是 JVM 在某种程度上针对原始代码进行了优化,尤其是像这样的嵌套调用children.add(new SelectItem(listType.getId(), listType.getDescription()));
.
比较这两种方法,哪一种是首选方法,为什么?这是在内存占用、性能、可读性/易用性以及其他我现在没有想到的方面。
后一个代码片段什么时候比前一个代码片段更有优势,即是否有(大约)数量的listType.getDescription()
使用临时局部变量时的调用变得更可取,因为listType.getDescription()
总是需要一些堆栈操作来存储this
object?
我几乎总是更喜欢局部变量解决方案。
内存占用
单个局部变量占用 4 或 8 个字节。它是一个引用并且没有递归,所以我们忽略它。
表现
如果这是一个简单的 getter,JVM 可以自己记忆它,所以没有区别。如果这是一个无法优化的昂贵调用,则手动记忆可以使其速度更快。
可读性
跟着DRY原则。在您的情况下,这并不重要,因为局部变量名称是按字符排列的,与方法调用一样长,但对于更复杂的事情,它是可读的,因为您不必这样做找出10个不同点两个表达式之间。如果您知道它们是相同的,请使用局部变量来明确说明。
正确性
想象一下你的SelectItem
不接受null
s 并且您的程序是多线程的。的价值listType.getDescription()
在此期间可以改变,你就干杯了。
调试
拥有一个包含有趣值的局部变量是一个优势。
省略局部变量的唯一好处是节省一行。所以我只会在确实不重要的情况下才这样做:
- 非常简短的表达
- 不可能并发修改
- 简单的私有最终吸气剂
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)