use*_*900 5 java memory variables resources
场景是我需要至少访问两次值.即我正在使用记录器来跟踪应用程序中发生的情况.我想记录对象的名称,该函数正在处理,稍后使用相同的名称执行某些操作(即检查它是否包含某些字符串或将其放入数组中).
将名称存储在变量中:
foo(Bar bar){
String name = bar.getName();
logger.info("I am working with "+name);
this.doSomethingWith(name);
}
Run Code Online (Sandbox Code Playgroud)
或者两次调用getName():
foo(Bar bar){
logger.info("I am working with "+bar.getName());
this.doSomethingWith(bar.getName());
}
Run Code Online (Sandbox Code Playgroud)
我理解,在第一个场景中,我将创建一个新的String,为其赋值,然后两次检索该值.这样我使用更多的内存资源,对吗?
在第二种情况下,我是否访问了对象栏两次,然后两次访问它的名称.我想这不是一种干燥方法.但另一方面,我不是在记忆中重复自己,对吗?
哪种方法更好?
就我个人而言,我更喜欢第二种方法。\n事实上,我通常仅在必要时创建临时变量。
\n\nMartin Fowler ( http://en.wikipedia.org/wiki/Martin_Fowler ) 也遵循此准则。他在我读过的他的书中讲述了这一点:
\n\nhttp://www.amazon.fr/Refactoring-Improving-Design-Existing-Code/dp/0201485672
\n\n关于该主题的书籍的免费摘录如下:
\n\nhttp://sourcemaking.com/refactoring/replace-temp-with-query
\n\n有些人会认为删除临时变量可能会导致性能问题。
\n\n正如马丁·福勒所说:
\n\n\n\n\n您可能会担心这种情况下的性能。与其他性能问题一样,暂时先让它解决。十分之九,这并不重要。当确实重要时,您将在优化过程中修复问题。通过更好地分解代码,您通常会发现更强大的优化,而如果不进行重构,您可能会错过这些优化。如果情况变得更糟,\xe2\x80\x99s 很容易恢复温度。
\n
但无论如何,这是一个品味问题。有些人认为第一种方法更具可读性,另一些人则认为第二种方法更具可读性。我真的更喜欢第二个,因为我讨厌临时变量添加没有实际值的行:)
\n| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |