为了提高内存效率,我们在Java中将成员变量声明为静态的,因为静态变量在类区域中仅获取一次内存。但是对于String变量,应将其声明为静态以提高内存效率,因为String仅在String常量池中获取内存。
关于“将声明字符串为静态/非静态的字符串以节省存储空间吗?”
您对在字符串常量存储部分中如何放置字符串常量是正确的。动态创建的字符串(即在运行时)仍将放入堆中。
使用静态,理论上您将在堆上的内存中节省空间,因为将只有一个指针/指向您的字符串的引用-静态的。但是就内存管理而言,即使实例化的基本Object
也是50+字节。然后是内存分区的问题...您节省的4/6字节可能根本不节省任何/太多的空间。
首先,实例变量不同于类变量(静态变量)。之所以称为实例,是因为我们通过创建类的实例来访问它们。
涉及静态变量,如果希望它们在应用程序加载期间和整个应用程序中可用,则将创建它们,并且它们在内存中可用,直到jvm停止为止。
根据您的情况,如果要保留字符串值(类似于Logger之类的东西)并在整个应用程序中使用相同的值,则可以将其创建为静态变量。但是,如果您认为String的值可能会随每个实例而变化,那么最好将其作为实例变量。