タイトル : Re^2: ArrayListのソート 投稿日 : 2004/12/02(Thu) 02:17 投稿者 : たくボン
るしぇさんの補足です。 .NET(というかCLR)においてStringクラスは、不変で順序のある参照型として定義されています。 CLRにおいてStringクラスは他のクラスとは少々異なる動作をします。(通常Stringクラスを生成する場 合にはNewを使いませんよね?API等を利用する場合にNewしちゃう場面もありますが・・・) String型に同じリテラル文字列を代入する場合、同じ文字列がマネージヒープ上(インターンプール) に既に存在する場合、異なる変数でも同じインスタンスの参照を代入します。(これを文字列のインタ ーン化と言います。ヘルプでStringクラスのInternメソッドを参照してみてください。またC#等で ObjectクラスのReeferenceEqualsを使って参照の比較をしてみたらよく挙動がわかるかもしれません ね。) つまり、同じリテラル文字列(もしくはnull参照)を代入した値を使用して、Staring.Compare()を使用し ても参照元が同じなので比較結果が常に等しいというのが原因と考えられます。 |