Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
String型の等価比較
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9431#CommentId13405
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2009/11/4 20:27:04
> is演算子は参照の等価を調べるはずです。
その通りです。ReferenceEquals メソッドの動作ですね。
> なのに例1では値の等価を調べているように思われます。
ここには、String 型であるが故の注意点があります。
まず、String 型とは値が固定的であり、通常、その値は変更できないことになっています。例えば、
Dim x As String = "abc"
x = "def"
という処理は、一つの文字列インスタンスの値を abc → def に書き換えているのではなく、
abc というインスタンスを捨てて、def という別のインスタンスを割り当てる事を意味します。
この「内容が変化しない」という特性ゆえ、これらのインスタンスが同一であろうとなかろうと、
利用側には影響が少ないため、まるで値型と同じように振る舞えるようになっています。この特性を活かし
リテラル文字列については、同じ文字列参照を流用することでメモリ使用量を抑えるようになっています。
(この仕組みを、文字列インターン プールと言います)
http://msdn.microsoft.com/ja-jp/library/system.string.intern.aspx
http://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes.ldstr.aspx
ただし、同じ内容が常に同一インスタンスになるわけではありません。今回のようなパターンや
「New String( Char配列 )」で生成された場合などでは、それぞれユニークなインスタンスを返します。