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));
}
}

转载于:https://www.cnblogs.com/shhaoran/archive/2013/02/06/2924511.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值