Java中字符串探索----String ,StringBuffer ,StringBuilder及字符串缓存池

 字符串是编程中应用到最多的一个数据类型,简单实用,但是深入理解它们,会给我们带来更多好处。

字符串缓存池:

为了节省内存,提高资源的复用,java中引入了字符串缓存池的概念。

缓存池中的字符串是不可回收的:

在缓存池中的字符串是不会被垃圾回收机制回收的,基本都是常驻内存,所以过多食用String类,可能会出现内存溢出(下面会讲)。

怎么样才会存进缓存池:

  1. 直接量赋值创建对象
    在Java,基本包装类型String,Long,Float,Boolean.......都可以利用直接量创建对象。
    String用直接量进行创建对象的时候,会先在缓存池找到字符串相同的对象,然后指向缓存池中该对象,这样就避免了重新为该对象分配内存,从而提高了复用,所以建议多用直接量去创建对象,这个也是上篇博文所推荐的。
  2. 调用构造器创建对象
    这种方法调用构造器,凡是new出来的对象都要进行内存分配,所以是不会指向缓存池之前已有的对象,这样就导致缓存池里面可能有多个值相同的String对象。




package biaodashi;
/**
* 字符串关于缓存池
*
* @author ccf
*
*/
public class StringHuanCunChi {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StringHuanCunChi huanCunChi = new StringHuanCunChi();
huanCunChi.test1();
}
public void test1() {
String str1 = "ccf";
String str2 = "ccf";
String str3 = new String("ccc"); // new 会有新的地址分配,所以不会指向缓存池的"ccc"
String str4 = new String("ccc");
System.out.println("str1==str2?" + (str1 == str2));
System.out.println("str3==str4?" + (str3 == str4));
}
}
posted on 2013-02-06 16:40  蜜雪薇琪  阅读(177)  评论(0编辑  收藏  举报