面试题答案
一键面试常量池的主要作用
- 节省空间:相同的常量在常量池中只存储一份,避免重复存储,提高空间利用率。例如,多个地方使用的字符串常量“Hello”,在常量池中只有一个副本。
- 动态链接:在类加载时,常量池中的符号引用会被动态链接到实际的内存地址。比如,对其他类中方法的调用,通过常量池中的符号引用在运行时找到实际方法的内存地址。
常见常量类型及其含义
- CONSTANT_Utf8_info
- 含义:用于存储UTF - 8编码格式的字符串。主要用于表示类名、字段名、方法名、字符串常量等。例如,类名“com.example.MyClass”就以这种常量类型存储在常量池中。
- CONSTANT_Integer_info
- 含义:表示int类型的常量值。例如,在代码中定义的
int num = 10;
,如果这个10被放到常量池中,就会以CONSTANT_Integer_info类型存储。
- 含义:表示int类型的常量值。例如,在代码中定义的
- CONSTANT_Float_info
- 含义:表示float类型的常量值。例如,
float f = 3.14f;
中的3.14f若在常量池中,就是此类型。
- 含义:表示float类型的常量值。例如,
- CONSTANT_Class_info
- 含义:用于表示类或接口的符号引用。它存储了类或接口的全限定名的索引,通过这个索引可以在常量池中找到类或接口的全限定名。比如,在引用
java.util.ArrayList
类时,常量池中会有一个CONSTANT_Class_info类型的常量指向该类的全限定名。
- 含义:用于表示类或接口的符号引用。它存储了类或接口的全限定名的索引,通过这个索引可以在常量池中找到类或接口的全限定名。比如,在引用
- CONSTANT_Methodref_info
- 含义:表示对类中方法的符号引用。包含了所引用方法的类的符号引用以及方法名和方法描述符的索引,用于在运行时动态链接到实际的方法。例如,调用
String
类的length()
方法,常量池中就会有一个CONSTANT_Methodref_info类型的常量来记录这个方法的引用信息。
- 含义:表示对类中方法的符号引用。包含了所引用方法的类的符号引用以及方法名和方法描述符的索引,用于在运行时动态链接到实际的方法。例如,调用