只是一个简单的问题,什么在Java中更昂贵?
double test = 5;
double test1 = 5;
或
double test = 5;
double test1 = test;
答案 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'可能是一个特殊情况,其中有一个静态整数的系统池,我知道他们用字符串来做。有谁知道吗?