【发布时间】:2019-07-08 08:56:52
【问题描述】:
在我的团队中,我们进行了一次小型讨论,如果在一个类中声明为“private static final”的字段与仅将其声明为“private final”相比有什么优势。 例如,如果我的班级中有以下行:
private static final String a = "a String";
这真的比像这样声明更好吗:
private final String a = "a String";
如果它是一个可以在这个类之外使用的变量,那么将它声明为静态是完全有意义的。但是由于它是私有的,除了静态变量只创建一次并且在所有对象中都被引用之外,我没有看到任何真正的优势。我们有很多测试,这些测试定义了这样的变量。这些测试仅在系统启动时运行一次,之后不再需要。除此之外,我还缺少什么吗?
【问题讨论】:
-
每次创建所述类型的实例时,都不会重新初始化静态字段。
-
如果内容始终保持不变,我认为没有理由在没有
static的情况下声明类似final的内容。您不必要地创建新对象。对于String,这种开销是最小的,因为实际的文本是实习的,但是如果您在生产代码中创建了更复杂的对象并“忘记”将它们设为静态,您可能会遇到甚至可能没有意识到的性能问题。最好养成将它们设为静态的习惯。 -
同样声明静态不会影响内存印记/序列化和上述类型的什么
-
另一个区别是静态变量可以通过静态和非静态方法访问。实例变量不能被静态方法访问。
-
从使用角度看。在您可能拥有的任何静态方法中只能访问静态变量。如果没有静态方法,那么它基本上是一个单例常量。
标签: java string static variable-declaration