MST

星途 面试题库

面试题:Java中String常量池的基本原理

请简要阐述Java中String常量池的基本原理,以及它在内存管理方面的作用。并举例说明在什么情况下字符串会被放入常量池中。
43.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

String常量池基本原理

在Java中,String常量池是一个存储字符串字面量(literal)的特殊内存区域。当代码中出现字符串字面量时,JVM首先会检查常量池中是否已存在该字符串。如果存在,则直接返回常量池中该字符串的引用;如果不存在,则在常量池中创建该字符串并返回其引用。

在内存管理方面的作用

  1. 节省内存:相同的字符串字面量在常量池中只会存在一份,避免了重复创建相同字符串对象,从而大大节省内存空间。例如,在一个大型项目中,可能有大量代码使用到"hello"字符串,如果没有常量池,每个"hello"都会创建一个新的对象,占用额外内存。
  2. 提高性能:通过复用已有的字符串对象,减少了对象创建和垃圾回收的开销,提高了程序性能。

字符串放入常量池的情况举例

  1. 字符串字面量:直接使用双引号定义的字符串会被放入常量池。例如:
String str1 = "java";

这里的"java"会被放入常量池中,str1指向常量池中的这个字符串。 2. 调用intern()方法:当调用字符串对象的intern()方法时,如果常量池中不存在该字符串,则将其放入常量池,并返回常量池中该字符串的引用。例如:

String str2 = new String("world");
String internedStr = str2.intern();

这里str2是在堆上创建的字符串对象,调用intern()后,常量池中会放入"world"(如果之前不存在),internedStr指向常量池中的"world"。