面试题答案
一键面试常量池位置
在Java 7之前,常量池位于方法区中。从Java 7开始,字符串常量池被移到了堆中,而其他类型的常量池(如基本类型常量池等)仍部分在方法区(元空间,在Java 8及之后方法区被元空间替代)。
常量池作用
- 节省内存空间:当程序中多次使用相同的常量时,常量池只会存储一份该常量,多个地方引用此常量时指向常量池中的同一份数据。例如,多个字符串对象如果内容相同,它们在常量池中实际共享同一个字符串常量。
- 提高性能:在运行时,对于字符串拼接等操作,如果拼接的字符串是常量,Java编译器会在编译期优化,直接在常量池中生成拼接后的常量,避免在运行时动态生成新的字符串对象,从而提高程序执行效率。
- 支持字符串驻留:通过
intern()
方法,字符串对象可以在常量池中查找是否已存在相同内容的字符串,如果存在则返回常量池中的引用,进一步节省内存和提高效率。