再说String Pool

共享与缓存的概念在程序设计语言中经常被使用。与之相关的设计模式有享元模式。

在一般的程序设计中,通用会使用集合框架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"对象。

 

 

 

你可能感兴趣的:(J2SE)