我刚刚阅读了关于writing efficient code in J2ME的BlackBerry文档中的一篇文章。
在那篇文章中,有一节建议你“为字符串使用静态变量”。原因是,由于编译器将static final
引用内联为字符串文字,最好将其保留为非final(我猜假设检索静态引用比从字符串池中检索更便宜?)。 / p>
这适用于所有JVM吗?我上一份工作的老板把我们的头脑狠狠地告诉我们,我们应该始终总是使用static final
作为我们的常量。我们在Java中进行嵌入式编程,所以他是性能的真正坚持者(虽然在这种情况下我不确定他是否更关心内存或速度)。我的老板多年来一直在做Java,真的很了解他的东西,所以我接受了他的建议;现在我得到了相互矛盾的建议!
哪一个更好?您可以从内存保护角度或速度角度来回答,也可以回答J2ME或J2SE。
答案 0 :(得分:3)
一般来说,它们应该是相同的。 (将相同的定义为足够接近以至于永远不会重要)
我非常强烈地认为你应该对你的意图进行编码(即静态与非静态定义是否由类常量与实例定义恒定的)而不是任意的“性能增强”
如果您发现这是一个重大的性能问题(并且只在您测量它之后!),我会将其归类为编译器/ JVM缺陷并将解决方法(交换其静态)放在适当位置,并附带注释说明原因。