[解決済み] C#では、なぜStringは値型のように動作する参照型なのですか?
2022-03-22 09:27:43
疑問点
Stringは、immutableであることや、同じオブジェクトを参照していることを確認するのではなく、テキストを比較するために==がオーバーロードされていることなど、値型の特徴をほとんど持っているにもかかわらず、参照型である。
では、なぜ文字列は単なる値型ではないのでしょうか?
どうすれば解決するの?
文字列は巨大になる可能性があり、ヒープに保存する必要があるため、値型ではありません。バリュータイプは(今のところCLRのすべての実装で)スタックに格納されます。スタックが32ビットで1MB、64ビットで4MBしかないため、文字列をボックス化する必要があり、コピーのペナルティが発生します。
(編集: 値の型のストレージが実装の詳細であることについての説明を追加しました。その結果、値のセマティックを持つ型が System.ValueType を継承していないという状況が発生します。Benさん、ありがとうございます)。
関連
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] なぜlist.join(string)ではなくstring.join(list)なのでしょうか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#で演算子==はジェネリック型に適用できない?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】ExpandoObjectの本当のメリットは何ですか?
-
[解決済み】なぜ、Swiftの文字列では、?のような絵文字が奇妙に扱われるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である