ホームページ バックエンド開発 C#.Net チュートリアル C# の文字列は値型ですか、それとも参照型ですか?

C# の文字列は値型ですか、それとも参照型ですか?

Mar 04, 2017 am 10:34 AM

まずコードを見てください:

           int a = 1;           
           int b = a;
           a = 2;           
           bool valOrRef = b == 2  ;//false;
ログイン後にコピー

aに続いてbが変更されていないため、int型が値型であることがわかります。

もう一度次のコードを見てください:

            string str11 = "qa";            
            string str22 = str11;
            str11 = "qaz";            
            bool valOrRef2 = str22 == "qaz"; //false
ログイン後にコピー

結果も false なので、string も値の型です。

次のコードをもう一度見てください:

            string str1 = "qaz";            
            string str2 = "qaz";            
            bool refequ = object.ReferenceEquals(str1, str2); //true
ログイン後にコピー

refequ は true に等しいです。 string が実際に値型である場合、どのようにして refequ が true になることができますか。なぜなら、次のコードを見てください:

            int a = 1;            
            int b = 1;            
            bool refequ2 = object.ReferenceEquals(a, b);//false
ログイン後にコピー

int は値型です。これは確かです、ステートメント 2 の int 変数。

これは矛盾していますが、どう説明すればよいでしょうか。文字列は値型のように見えますが、参照型にも見えます。

Microsoft: string は参照型です。では、値型のようなものをどのように説明すればよいでしょうか?

2 つの点に注意してください:

1) 文字列オブジェクト、値が同じであれば、それらの参照アドレスも同じです。
2) string オブジェクトの値が等しくない場合、それらの参照アドレスは等しくありません。

上記のコードの分析:

            string str11 = "qa";//str11指向了内存addressA,数据为qa;
            string str22 = str11;//str22也指向内存addressA
            str11 = "qaz";//str11新指向了内存addressB,数据为qaz
            bool valOrRef2 = str22 == "qaz"; //false
ログイン後にコピー

要約:

string の最も重要な特徴の 1 つは、定数の不変性 を備えていることです。文字列を作成したら、その連続部分をマネージド ヒープ メモリ領域にあるため、この文字列を長くしたり短くしたり、形式を変更したりすることはできません。この文字列に対するさまざまな操作によって返されるすべての文字列は、実際には別の再作成された文字列であり、それ自体には変更が生じません。

追記:
弦の効率はどうですか?

文字列オブジェクトは、一度オブジェクトが作成されると、オブジェクトの値を変更できないため、不変(読み取り専用)オブジェクトと呼ばれます。場合によっては、文字列が変更されているように見えることがあります。実際には、値が変更されるたびに、元のオブジェクトが参照したまま、新しい文字列オブジェクトが作成されます。元のオブジェクトなので変更されません。 これが文字列が非効率である理由でもあります。

上記は「C# 文字列は値型か参照型か?」の内容です。その他の関連内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

See all articles