什么更贵?作业或声明?

时间:2010-07-12 11:10:55

标签: java performance

只是一个简单的问题,什么在Java中更昂贵?

   double test = 5;
   double test1 = 5;

   double test = 5;
   double test1 = test;

3 个答案:

答案 0 :(得分:19)

都不是。 Java有一个非常好的优化器,它将导致在这个例子中生成完全相同的代码。

编译器会查看作业double test1 = test;,并且可以确定此时test是一个等于5的常量,并完全优化作业。

这也是你不应该害怕扩展数值的原因,即

int timeout = 60 * 60 * 2   // 2 hours in seconds

完全不谈,这是micro-optimisation的一个案例,永远不会返回任何值得注意的事情。担心网络连接会阻碍工作几秒钟。

答案 1 :(得分:3)

两者之间的差异应该可以忽略不计。我想这个常数会快一点,因为没有测试值的加载,但实际上......你不值得花时间去担心它。可读性比您可能想到的一两个周期重要得多。

答案 2 :(得分:0)

我的第一个冲动就是说,写一个小的循环程序并测试它。 然而,它可能比那更复杂。

在编写代码之后,Java可以做各种优化工作,这就是他们关注的东西。这样就很难回答,而且可能取决于特定的JRE和代码。

虽然我理解这是一个有趣的学术问题,但实际上答案可能是“并不重要”代码的其他部分通常会更多地成为瓶颈。

对于您的具体示例,我感觉'5'可能是一个特殊情况,其中有一个静态整数的系统池,我知道他们用字符串来做。有谁知道吗?