面试题答案
一键面试String常量池基本原理
在Java中,String常量池是一个存储字符串字面量(literal)的特殊内存区域。当代码中出现字符串字面量时,JVM首先会检查常量池中是否已存在该字符串。如果存在,则直接返回常量池中该字符串的引用;如果不存在,则在常量池中创建该字符串并返回其引用。
在内存管理方面的作用
- 节省内存:相同的字符串字面量在常量池中只会存在一份,避免了重复创建相同字符串对象,从而大大节省内存空间。例如,在一个大型项目中,可能有大量代码使用到"hello"字符串,如果没有常量池,每个"hello"都会创建一个新的对象,占用额外内存。
- 提高性能:通过复用已有的字符串对象,减少了对象创建和垃圾回收的开销,提高了程序性能。
字符串放入常量池的情况举例
- 字符串字面量:直接使用双引号定义的字符串会被放入常量池。例如:
String str1 = "java";
这里的"java"会被放入常量池中,str1
指向常量池中的这个字符串。
2. 调用intern()
方法:当调用字符串对象的intern()
方法时,如果常量池中不存在该字符串,则将其放入常量池,并返回常量池中该字符串的引用。例如:
String str2 = new String("world");
String internedStr = str2.intern();
这里str2
是在堆上创建的字符串对象,调用intern()
后,常量池中会放入"world"(如果之前不存在),internedStr
指向常量池中的"world"。