Java中字符串探索----String ,StringBuffer ,StringBuilder及字符串缓存池
2013-02-06 16:40
549 查看
字符串是编程中应用到最多的一个数据类型,简单实用,但是深入理解它们,会给我们带来更多好处。
字符串缓存池:
为了节省内存,提高资源的复用,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));
}
}
字符串缓存池:
为了节省内存,提高资源的复用,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));
}
}
相关文章推荐
- Java中字符串探索----String ,StringBuffer ,StringBuilder及字符串缓存池
- Java中字符串探索—-String ,StringBuffer ,StringBuilder及字符串缓存池
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- day7 常用类字符串处理类--String、StringBuffer、StringBuilder 自动装箱、拆箱 Object类 Java 的异常处理机制
- 字符串逆序,字符串转为字符数组 、字符串转字节数组,字节数组转字符串、java中String、StringBuffer、StringBuilder
- Java 中字符串拼接 String 和 StringBuilder(StringBuffer)的使用
- Java之字符串String、StringBuffer、StringBuilder
- Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder
- Java之字符串String,StringBuffer,StringBuilder
- java - 字符串处理 - String|StringBuffer|StringBuilder
- 探索JAVA之String、StringBuffer、StringBuilder的比较
- 四:Java之字符串操作String、StringBuffer和StringBuilder
- Java字符串(String_StringBuilder_StringBuffer)
- Java中的字符串 String, StringBuffer和StringBuilder
- Java之字符串String,StringBuffer,StringBuilder
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- (5)java 字符串 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- Java字符串类型String、StringBuilder、StringBuffer的区别
- JAVA学习笔记——字符串操作(String,StringBuffer,StringBuilder)
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接