[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