2010-11-23 68 views
1

我刚刚阅读了关于writing efficient code in J2ME的BlackBerry文档中的一篇文章。非最终静态字符串比静态最终字符串更有效吗?

在那篇文章中有一个部分建议您“为字符串使用静态变量”。理由是,由于编译器将字符串文字引用为static final,因此最好将它保留为非最终字符串(我想假设检索静态引用比从字符串池中检索更便宜)。

这对所有JVM都是如此吗?我的老板在我的上一份工作中,把它打入我们的头脑中,我们应该始终如一地,总是使用static final作为我们的常量。我们使用Java进行嵌入式编程,所以他是一个真正的性能坚守者(尽管在这种情况下我不确定他是否更关心内存或速度)。我的老板多年来一直在做Java,真的很了解他的东西,所以我听取了他的建议。现在我得到了矛盾的建议!

那么哪一个更好?您可以从内存保护角度或速度角度以及J2ME或J2SE中作出回答。

+7

你应该使用static final。让机器去做它确定是否应该内联的东西。此外,如果您担心内嵌字符串与调用它的性能,java可能不适合在 – Falmarri 2010-11-23 23:57:28

+0

中使用正确的语言当您为Android或BlackBerry编程UI时,您没有语言选择。但除此之外,最好还是要知道发生了什么事情!来吧,男人,这是一个原则问题!你不服从机器,机器服从你!此外,为什么这是一个评论,而不是一个答案? – 2010-11-24 00:27:46

回答

3

一般来说,它们应该是一样的。 (随着相同定义为足够接近,它永远不会没关系)

我会非常强烈地认为,你应该编码您的意图(即具有静态与非静态性的,这是否定义是常量与一个实例常数),而不是一些任意的“性能增强”

如果你发现这是一个显著的性能问题(只有当你衡量它!),我将它归类为一个编译器/ JVM缺陷并将解决方法(交换其静态内容)置于适当位置,并附注释说明原因。

相关问题