最近我们在工作中讨论了局部变量对 Java 代码的性能和可读性的影响。我的一些同事认为像这样的声明
new DoSomethingCmd(new SelectionContext(context, keys), infoStuff.getCurrentRole().getRole_id()).execute(getResultContainer());
会给应用程序带来相当大的性能提升。他们愿意为此牺牲代码的可读性。他们这样说对吗?上面的版本比这个版本的性能要好得多吗?
final SelectionContext selectionContext = new SelectionContext(context, keys);
final String roleId = infoStuff.getCurrentRole().getRole_id();
final DeleteSomethingCmd deleteSomethingCmd = new DeleteSomethingCmd(selectionContext,roleId);
deleteSomethingCmd.execute(getResultContainer());
我意识到第一个语句本身并没有那么难掌握,但是当您的大部分代码都采用这样的结构时,复杂性会很快增加。
感谢您的意见。
最佳答案
“优化”版本唯一做的就是堆栈中的变量少了一些,稍微增加了内存消耗。应该仔细衡量性能(google how to benchmark an issue),但我严重怀疑它是否有任何明显的效果。
此外,花时间改进一段不经常使用的代码的性能只会浪费开发人员的时间,这是代价高昂的。
在这种情况下,可读性应该占上风。
编辑:无论如何,如果您使用适当的缩进,我不认为这两个版本在可读性方面有太大差异:
new DoSomethingCmd(
new SelectionContext(context, keys),
infoStuff.getCurrentRole().getRole_id()
).execute(getResultContainer());
本文的优点是您没有定义不再需要的变量(selectionContext
、roleId
)(因此当您再次阅读该方法时,它们会不要与更多“持久”变量混合)。无论如何,这是可以解释的;最重要的是,除非您有这样做的动机,否则您不应该担心优化。
除此之外,还有一些 Java 编程指南可以为您提供真正有用的技巧(例如使用 StringBuilder
连接字符串)。
关于java - 可读性与性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709334/