浅谈Java String内幕:
前言String字符串在Java应用中使用非常频繁,只有理解了它在虚拟机中的实现机制,才能写出健壮的应用,本文使用的JDK版本为1.8.0_3。
常量池Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)。
package com.ctrip.ttd.whywhy;
public class Test {
public static void main(String[] args) {
String test = "test";
}
}很简单的一段代码,通过命令 javap
-verbose 查看class文件中 Constant pool 实现:
Constant pool:
#1 = Methodref #4.#13 // java/lang/Object."":()V
#2 = String #14 // test
#3 = Class #15 // com/ctrip/ttd/whywhy/test
#4 = Class #16 // java/lang/Object
#5 = Utf8
#6 = Utf8 ()V
#7 = Utf8 Code
#8 = Utf8 LineNumberTable
#9 = Utf8 main
#10 = Utf8 ([Ljava/lang/String;)V
#11 = Utf8 SourceF