当我在Java代码中定义常量值时,我通常会将它们声明为"private static final",但最近我一直在维护代码,其中常量被定义为"private final".
我现在正在优化,并想知道是否要"静态化"这些.
例如
public class X {
private final String SOME_CONST = "Whatever";
}
Run Code Online (Sandbox Code Playgroud)
以上代码是否与以下代码等效(在运行时),因此只保留了1个'SOME_CONST'副本?
public class X {
private static final String SOME_CONST = "Whatever";
}
Run Code Online (Sandbox Code Playgroud)
我原本以为这是相当基本的,但我无法在任何地方找到答案.
[编辑]有些人回答了被实习的String实例.对不起,我应该选择一个更好的例子,在我看的情况下,它不仅仅是字符串,而是很多不同的类型(一些标准,一些用户定义).
我对'私人决赛'与'私人静态决赛'宣言的影响更感兴趣.
当SOME_CONST声明为非静态时,虚拟机将创建一个String内容为的实例"Whatever".但是,X该类的所有实例都将包含对此String对象的引用.因此,您只有一个实例String,但很多引用它.
将该字段设置为静态以避免不必要的引用可能是值得的.