通过更快地处理某种方法的能力,将方法参数传递给函数会产生什么影响。
如果某个方法需要区域设置作为输入。
您会将此声明为foo(Locale locale)
foo(User user) { Locale locale = user.getLocale(); }
必须比前一个慢吗?
答案 0 :(得分:7)
如果你在同一个方法中出于某些其他原因需要用户,那么传递一个单独的语言环境是毫无意义的 - 如果传入不同的来自用户的区域设置。这假设getLocale
是一个由字段支持的简单属性,当然。
我肯定会首先编写最简单,最逻辑的代码......像这样的微优化在性能方面很少有所不同,但经常会导致难以理解的代码。只有当您显示给定的代码部分是相关的时才进行微优化,并且只有当您证明它实现了改进时才保持优化。
以最直接的方式为您的方法提供所需的信息。如果需要用户,请将其提供给用户。如果只需要语言环境,请仅提供语言环境。如果它需要用户和语言环境,但语言环境与用户关联,那么只需给用户并适当地派生语言环境。
(为了平衡,我应该指出Joe Duffy最近的博客文章in favour of optimization。我不同意该帖子的要点,但它仍然值得一读。)
答案 1 :(得分:2)
foo(Locale locale)
肯定会比以下更快:
foo(User user)
{
Locale locale = user.getLocale();
}
因为后者涉及额外的方法调用。这并不一定意味着程序整体上会变慢,因为语言环境必须来自某个地方所以我猜测调用代码会是这样的:
Locale locale = user.getLocale();
this.foo(locale);
这导致了相同的方法调用。
答案 2 :(得分:1)
循环运行实际生产代码数百万次并测量它的速度。如果表现不够好,请 。
过早优化是许多邪恶的根源。不要这样做。