.NET Framework - 文字列が値型か参照型かの詳しい説明

黄舟
リリース: 2017-03-18 13:37:38
オリジナル
1363 人が閲覧しました

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

           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 は値型です。これは確かです。ステートメント int変数が 2 つあります。

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

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

2つの点を覚えておいてください:

1) stringobjects、値が同じであれば、それらのreferencesアドレスも同じです。
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 つは、定数の不変性 を備えていることです。文字列を作成すると、その文字列に継続的なメモリが割り当てられます。マネージド ヒープ スペースを使用するため、この文字列を長くしたり短くしたり、形式を変更したりすることはできません。この文字列に対するさまざまな操作によって返されるすべての文字列は、実際には別の再作成された文字列であり、それ自体には変更が生じません。

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

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

以上が.NET Framework - 文字列が値型か参照型かの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!