投稿者 ユニ  (社会人) 投稿日時 2009/11/4 07:44:56
String型の挙動について勉強しているのですが等価比較で「なぜ?」と思っていることがあります。

例1
Dim x As String = "1"
Dim y As String = "1"
If x is y Then
  MsgBox("等価")
End If

例2
Dim x As String = 1
Dim y As String = "1"
If x is y Then
  MsgBox("等価")
End If

上記の例ではis演算子を使用して参照の等価を調べています。
結果は例1は"等価"とメッセージが表示されます。
例2はメッセージは表示されません。
ここで疑問があります。is演算子は参照の等価を調べるはずです。
なのに例1では値の等価を調べているように思われます。
例2に関してはなぜこのような挙動をとるのか検討もつきません。
値の等価を調べているならメッセージが表示されるはずです。
なのに""をはずすと等価ではないということなのでしょうか。
ちなみにEqualsメソッドで同様のことを試しましたが
結果は例1、例2ともにメッセージが表示されました。
この結果はStringクラスがEqualsメソッドをオーバーライドして
おり、値の等価を調べていると理解できます。

例1、例2に関して皆さんの意見をお聞きしたいです。
宜しくお願いします。m(_ _)m