JAVA中具有实例缓存的不可变类
作者: 网络转载, 出处:中文JAVA技术网 , 责任编辑: 李春禹,
2007-12-18 14:19
在JDK 1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。//如果在缓存中不存在Name对象,就创建该对象,并把它的软引用加入到实例缓存 Name name=new Name(firstname,lastname);
不可变类的实例的状态不会变化,这样的实例可以安全地被其他与之关联的对象共享,还可以安全地被多个线程共享。为了节省内存空间,优化程序的性能,应该尽可能地重用不可变类的实例,避免重复创建具有相同属性值的不可变类的实例。
在JDK 1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。JDK 1.5的Integer类新增了一个参数,为int类型的静态工厂方法valueOf(int i),它的处理流程如下:
if(在实例缓存中存在取值为i的实例)
直接返回这个实例
else{
用new语句创建一个取值为i的Integer实例
把这个实例存放在实例缓存中
返回这个实例
}
在以下程序代码中,分别用new语句和Integer类的valueOf(int i)方法来获得Integer实例。
| Integer a=new Integer(10); Integer b=new Integer(10); Integer c=Integer.valueOf(10); Integer d= Integer.valueOf(10); System.out.println(a==b); //打印false System.out.println(a==c); //打印false System.out.println(c==d); //打印true |
- 本文关键词:

