/**
不可变实例的实例状态不可改变,可以方便被多个对象共享
*/
class cacheimmutale
{private static int MAX_SIZE=10;
private static cacheimmutale[] cache=new cacheimmutale[MAX_SIZE];//用数组来缓存已有的实例
private static int pos=0;//‘记录缓存实例在缓存中的位置,cache【pos-1】是最新缓存的实例
private final String name;
private cacheimmutale(String name)
{
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);//把新创建的对象缓存起来,pos+1
return cache[pos-1];
}
public boolean equals(Object obj)
{
if (this == obj) //两个对象为同一个对象
return true;
if(obj != null && obj.getClass()==cacheimmutale.class)//只有当obj是cacheimmutale对象
{
cacheimmutale ci=(cacheimmutale)obj;
return name.equals(ci.getname());//判断当前对象的name是否ci的name相等
}
return false;
}
public int hashcode()
{
return name.hashCode();
}
}
public class test6$4$7 {
public static void main(String[] args)
{
cacheimmutale c1=cacheimmutale.valueof("hello");
cacheimmutale c2=cacheimmutale.valueof("hello");
System.out.println(c1==c2);
}
}