6.4.8 缓存实例的不可变类

package chap6_4;

import javax.swing.CellEditor;

class CacheImmutale
{
    private static int MAX_SIZE=10;
    private static CacheImmutale[]cache=new CacheImmutale[MAX_SIZE];
    private static int pos=0;
    private final String name;
    public CacheImmutale(String name) {
        // TODO Auto-generated constructor stub
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public static CacheImmutale valueOf(String name)
    {
        for(int i=0;i<MAX_SIZE;i++)
        {
            if(cache[i]!=null&&cache[i].getName().equals(name))
            {
                return cache[i];
            }
        }
        if(pos==MAX_SIZE)
        {
            cache[0]=new CacheImmutale(name);
            pos=1;
        }
        else{
            cache[pos++]=new CacheImmutale(name);
        }
        return cache[pos-1];

    }
    public boolean equals(Object obj)
    {
        if(this==obj)
        {
            return true;

        }
        if(obj!=null&&obj.getClass()==CacheImmutale.class)
        {
            CacheImmutale ci=(CacheImmutale)obj;
            return name.equals(ci.getName());
        }
        return false;
    }
    public int hashCode()
    {
        return name.hashCode();
    }
}
public class CacheImmutaleTest {
    public static void main(String[] args)
    {
        CacheImmutale c1=CacheImmutale.valueOf("hello");
        CacheImmutale c2=CacheImmutale.valueOf("hello");
        System.out.println(c1==c2);
    }

}

运行结果

true

该类共可以缓存MAX_SIZE个CacheImmutale对象。

是否需要隐藏CacheImmutale类的构造器完全取决于系统需求,盲目乱用缓存也可能导致系统性能下降,缓存的对象会占用系统内存,如果某个对象只使用一次,重复使用的概率不大,缓存该实例就弊大于利;反之,如果某个对象需要频发的重复使用,缓存该实例就利大于弊。

package chap6_4;

public class IntegerCacheTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Integer in1=new Integer(6);
        Integer in2=Integer.valueOf(6);
        Integer in3=Integer.valueOf(6);
        System.out.println(in1==in2);
        System.out.println(in2==in3);
        Integer in4=Integer.valueOf(200);
        Integer in5=Integer.valueOf(200);
        System.out.println(in4==in5);

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值