MST

星途 面试题库

面试题:Java类文件结构中常量池的作用及常见常量类型

请简述Java类文件结构中常量池的主要作用,并列举至少三种常见的常量类型及其含义。
30.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

常量池的主要作用

  1. 节省空间:相同的常量在常量池中只存储一份,避免重复存储,提高空间利用率。例如,多个地方使用的字符串常量“Hello”,在常量池中只有一个副本。
  2. 动态链接:在类加载时,常量池中的符号引用会被动态链接到实际的内存地址。比如,对其他类中方法的调用,通过常量池中的符号引用在运行时找到实际方法的内存地址。

常见常量类型及其含义

  1. CONSTANT_Utf8_info
    • 含义:用于存储UTF - 8编码格式的字符串。主要用于表示类名、字段名、方法名、字符串常量等。例如,类名“com.example.MyClass”就以这种常量类型存储在常量池中。
  2. CONSTANT_Integer_info
    • 含义:表示int类型的常量值。例如,在代码中定义的int num = 10;,如果这个10被放到常量池中,就会以CONSTANT_Integer_info类型存储。
  3. CONSTANT_Float_info
    • 含义:表示float类型的常量值。例如,float f = 3.14f;中的3.14f若在常量池中,就是此类型。
  4. CONSTANT_Class_info
    • 含义:用于表示类或接口的符号引用。它存储了类或接口的全限定名的索引,通过这个索引可以在常量池中找到类或接口的全限定名。比如,在引用java.util.ArrayList类时,常量池中会有一个CONSTANT_Class_info类型的常量指向该类的全限定名。
  5. CONSTANT_Methodref_info
    • 含义:表示对类中方法的符号引用。包含了所引用方法的类的符号引用以及方法名和方法描述符的索引,用于在运行时动态链接到实际的方法。例如,调用String类的length()方法,常量池中就会有一个CONSTANT_Methodref_info类型的常量来记录这个方法的引用信息。