您的位置:首页 > 产品设计 > UI/UE

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

2013-02-06 16:40 543 查看
 字符串是编程中应用到最多的一个数据类型,简单实用,但是深入理解它们,会给我们带来更多好处。

字符串缓存池:

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

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

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

怎么样才会存进缓存池:

直接量赋值创建对象

在Java,基本包装类型String,Long,Float,Boolean.......都可以利用直接量创建对象。

String用直接量进行创建对象的时候,会先在缓存池找到字符串相同的对象,然后指向缓存池中该对象,这样就避免了重新为该对象分配内存,从而提高了复用,所以建议多用直接量去创建对象,这个也是上篇博文所推荐的。

调用构造器创建对象

这种方法调用构造器,凡是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));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐