[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11399] Re: Java 1.5 Tiger : A Developer's Notebook



In article <20040914003106.08A3.LOCUTUS@xxxxxxxxxxxxxxxx>
murayama wrote:
>#で,キャッシュするためには,上の条件が「言語仕様」として必要に
>#なります.これがもし「常にEqualsである」とかになっていると全Integer
>#インスタンスをキャッシュする必要があり,かえってコストが嵩む
>#恐れがあります.
厳密には、キャッシュというより intern ですね。
intern という目的からすると、SoftReference でキャッシュしておくの
は「GC されないこと」=「他に使用している箇所があること」なのでコ
スト増は少ないと考えられます。(SoftReference 自体の領域が無駄なの
で現実にはそうでもないですが^^;)

# ついでに、常に == であることを保証しようと思ったらそもそも new 
# できてはいけないわけですが。

>#まあ,そもそもStringやIntegerの参照比較って,滅多に使わない
>#ですけどね.ほとんどの人は「StringやIntegerでの比較は==ではなく
>#equals()を使わなければならない.」とだけ丸暗記してることでしょう.

ところでこういう仕様が普及し、この仕様を前提にプログラミングを始
める人が増えてくると、== での比較がますます危険になり(int と 
Integer のコンテキストの意識が希薄になると == は危険になってくるで
しょうから)、初心者は皆 equals を使うようになりそう。
そうすると、primitive の比較もみんな boxing が実行されるようにな
り、効率が下がる、と。

-- 
木下 信@ひらつか
http://www.sk-jp.com/