应该将字符串定义为静态,因为字符串文字只能在字符串常量池中获得一次空间

问题描述 投票:0回答:2

为了提高内存效率,我们在Java中将成员变量声明为静态的,因为静态变量在类区域中仅获取一次内存。但是对于String变量,应将其声明为静态以提高内存效率,因为String仅在String常量池中获取内存。

java
2个回答
1
投票

关于“将声明字符串为静态/非静态的字符串以节省存储空间吗?”

您对在字符串常量存储部分中如何放置字符串常量是正确的。动态创建的字符串(即在运行时)仍将放入堆中。

使用静态,理论上您将在堆上的内存中节省空间,因为将只有一个指针/指向您的字符串的引用-静态的。但是就内存管理而言,即使实例化的基本Object也是50+字节。然后是内存分区的问题...您节省的4/6字节可能根本不节省任何/太多的空间。


0
投票

首先,实例变量不同于类变量(静态变量)。之所以称为实例,是因为我们通过创建类的实例来访问它们。

涉及静态变量,如果希望它们在应用程序加载期间和整个应用程序中可用,则将创建它们,并且它们在内存中可用,直到jvm停止为止。

根据您的情况,如果要保留字符串值(类似于Logger之类的东西)并在整个应用程序中使用相同的值,则可以将其创建为静态变量。但是,如果您认为String的值可能会随每个实例而变化,那么最好将其作为实例变量。

© www.soinside.com 2019 - 2024. All rights reserved.