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