System.identityHashCode()って、一意である保証は無いのね。
Object.hashCode()のAPIドキュメントを見ていたら、
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
ん〜、結構これ使って、キャッシュとか実装した記憶が(汗)。まぁ、32bit JVMならまず大丈夫そうだけど。
となると、オブジェクトの参照を見分けるには、まず、System.identityHashCode()で分けておいて、この値が同じものを、Listにでも保存して、==で線形に比較するしかないんだろうか。
Re: System.identityHashCode()って、一意である保証は無いのね。
Re: System.identityHashCode()って、一意である保証は無いのね。
オブジェクトにGUIDを持たせるってことは、自分でいじれるオブジェクトですね。これなら、直列化を無視してよければ、単にlongのカウンタとかメモリ上に持って番号を振れば良さそうですね。
でもDIとかで、無限再帰しないようにインジェクト中のオブジェクトを覚えておくとか、汎用キャッシュとかだと、相手のソースをいじれるわけじゃないので、オープンクラスじゃない言語だと、難しそうです。そういえば直列化の際も、リング構造で、どうどうめぐりしないように、オブジェクトを覚えていたような気が。あれはどうなっているんだろう。





