共享与缓存的概念在程序设计语言中经常被使用。与之相关的设计模式有享元模式。
在一般的程序设计中,通用会使用集合框架List或Map等进行缓存操作。
本文简要说明String Pool。
1.什么是常量池,它位于哪里?
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。譬如String Pool。
在编译好的class文件中,有个区域称为Constant Pool,它是一个由数组组成的表,类型
为cp_info constant_pool[],用来存储程序中使用的各种常量,包括Class/String/Integer等各
种基本Java数据类型。
String Pool是对应于在Constant Pool中存储String常量的区域.习惯称为String Pool,也有人称为
String Constant Pool。
2.String的intern()方法
运行期调用String类的intern()方法可以向String Pool中动态添加String对象。
当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的
引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用。
3.面对Java String面试题,注意三点。
●.编译时和运行时
●.String Pool概念和
●.intern方法
4.以下代码产生几个对象?这些在之前的文章中有大量描述。幕后原因在此不赘述。
以下代码是连续的。
String str1 = new String("Hello");//2个,String pool中一个,堆中一个(若怀疑查看java api说明)
String str2 = new String("Hello");//1个,因为前一条语句已经在String Pool中添加了"Hello"
String Str3 = "Hello";//一个对象也没创建,只是指向了String Pool中的"Hello"对象。