[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 11413] Re: Java 1.5 Tiger : A Developer's Notebook
柴田です。
JLS3.0のドラフトには次のように書かれています。
If the value p being boxed is true, false, a byte, a char in the ragne
\u0000 to \u007f, or an int or short number between -128 and 127, then
let r1 and r2 be the results of any two boxing conversions of p. It is
always the case that r1==r2.
つまり、言語仕様です。ただし、この言語仕様をどのように実装するかは、実装
依存です。この点に関しては、次のように解説されています。
Ideally, boxing a given primitive value p, would always yield an
identical reference. In practice, this may not be feasible using
existing implementation techniques. The rules above are a pragmatic
compromise. The final clause above requires that certain common values
always to be boxed into indisitingushable objects. THe implementation
may cache these, lazily or eagerly.
Murayama Toshikiyo wrote:
>
> 村山@NETGENEです.
>
> > 高橋(智)です。
> >
> > 例に出したのは、もちろん、「良くない例」としてですよ。
> 引っ掛け問題ですか?(^^)
>
> 実際に試したりすると「-128〜127の範囲だと常にTRUEが成立する」と勘違いして
> しまうという.しかも実装が変わらない限りはバグがあっても動作します.
> 何年かたってキャッシュ実装が変わって,それまで動いていたプログラムが
> 突然動かなくなるその時まで気付かないかもしれません.
>
> ところでJavaPRESSを読んで思ったのですが,ひょっとして柴田さんも
> この「ひっかけ」にひっかかってません?なんにせよ誤解を招く表現
> なので,初心者に対してはちょっと不親切だと思います.
--
Yoshiki Shibata
http://www02.so-net.ne.jp/~yshibata