identityHashCode() vraci pro ruzne objekty ruzne hodnoty, ale pouze v
danem okamziku. Pokud napr. vytvorim objekt, ulozim si jeho
identityHashCode(), pak jej zahodim a vytvorim novy objekt, tento novy
objekt muze mit stejny identityHashCode.
Dobry napad je pouziti referenci z java.lang.ref.

Z.T.
-- 
Zdenek Tronicek
FIT CTU in Prague


Jaroslav Hurdes napsal(a):
>   Podle tohoto:
> System.identityHashCode(), which is guaranteed to return distinct
> integers for distinct objects within a JVM
>
> by mela vracet pro kazdou instanci objektu jinou hodnotu. Takze by to
> melo chodit, za predpokladu, ze porovnavate identicke objekty a ne
> ekvivalentni (se stejnou hodnotou, ale objekt je jiny). Jinak muzete
> pouzit tridy vyuzivajici Weak reference a nebo proste pred volanim cyklu
> inicializovat nejakou cache a po skonceni cyklu si ji explicitne uklidit
>
> Neco.initializeCache();
> while(...) {
>      neco.dejHodnotu(...);
> }
> Neco.cleanCache();
>
> Jaroslav Hurdes
>
> Dne 29.6.2010 9:45, michal.niko...@elanor.cz napsal(a):
>> mam tridu (smyslena, oholena jen na reprezentaci problemu):
>>
>> public class Neco implements INekohoJineho {
>>   public String dejHodnotu(Object element){
>>          String hodnota = Tool.casoveNarocnaMetoda(element);
>>          return hodnota;
>>   }
>> }
>>
>> metoda dejHodnotu je volana v cyklu frameworku nade mnou a jsou i
>> pripady,
>> kdy je nekolikrat po sobe volana se stejnou instanci element. Hodne by
>> se
>> program zrychlil, kdybych si uchovaval posledni instanci element se
>> kterou
>> bylo volano a jaka pri ni byla vypoctena "hodnota". Problem je, ze si
>> nemuzu dovolit drzet uvnitr tridy Neco referenci na element, protoze to
>> nema kdo uklidit a zivotnost tridy Neco je vyrazne vyssi nez element.
>>
>> Napada me misto uchovat jenom System.identityHashCode(element) misto
>> samotne reference na element, ale nemuzu se dopatrat jestli a z ceho
>> vychazi System.identityHashCode(). Vzdy jsem myslel, ze v zajmu
>> rychlosti
>> jde o nativni implementaci, ktera proste vrati adresu instance na heapu.
>> Pak by to bylo bezpecne, ale jistej si nejsem.
>>
>> jak by to teda pak vypadalo :
>>
>> public class Neco implements INekohoJineho {
>>     private int ihc = Integer.MIN_VALUE;
>>     private String hodnota = null;
>>    public String dejHodnotu(Object element){
>>          int foo = System.identityHashCode(element);
>>          if (foo == ihc) return hodnota;
>>          ihc = foo;
>>          hodnota = Tool.casoveNarocnaMetoda(element);
>>          return hodnota;
>>   }
>> }
>>
>
>

Odpovedet emailem