投稿者 ユニ  (社会人) 投稿日時 2009/11/5 08:08:51
>daiveさん
すいません。投稿するのは初めてで以後気をつけますm(_ _)m
私が試したのはVB2008のExpress Editionです。
Frameworkは3.5です。 
コンパイル設定等は全て既定値です。
テストのためにあえて暗黙の型変換は規制せず行いました。

>魔界の仮面弁士さん
文字列インターンプールですか。私も色々調べていたのですがそこまで
調べきれませんでした。ありがとうございます。

前からStringクラスは特殊だと知っていましたがここまで奥が深いと
驚かされます。

例2のような特殊なケースを探してみましたが、他に
""とString.Empty(Framework3.5だと等価になるがFramework2.0
だと等価にならない)があります。
どうして等価にならないのか仕組みを調べてみましたが、変数にリテラル文字列
を代入すると文字列インターンプールへの登録が行われるそうです。
リテラル文字列を代入しないやり方(今回のint型をString型へ代入、若しくは
New String( Char配列 )、String.Empty)はインターンプールへの登録は行われず、
結果、is演算子はFalseを返却したということなのでしょう。

参照型で比較演算子を使用して値の等価を調べられるクラスは比較演算子を
オーバーロードしているということですね。^^;

>聖帝さん
私は型変換は結構シビアに考えていますが、でも参照型の型変換とか
面倒ですね。縮小とか拡大とか考えなくてはいけないので。^^;