C#string詳解

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   io   strong   資料   

平時用的最多的莫過於string了,但有時遇到的一些問題,不仔細想還真容易出錯,今天我就來總結一下string的用法。

1.string是一個參考型別,平時我們比較string對象,比較的是對象的值而不是對象本身如:
string strA="abcde";string strB="abc";string strC="de";Console.WriteLine(strA == (strB+strC));//trueConsole.WriteLine((object)strA == (object)(strB+strC));//false

因為字串內容相同但引用的不是同一個執行個體

2.string對象是不可修改的

string strA="abcde";strA="aaaaa";

從表面上看似修改了strA的內容,事實上"abcde"沒有被修改,而是從新建立了一個對象"aaaaa",然後把該對象的引用賦給strA,最後"abcde"會被作為記憶體回收。

3.string的建立

直接賦值:string strA="abcde";//建立一個內容為abcde的string對象,然後將該對象的引用賦給strA

構造: char[] arr={‘a‘,‘b‘,‘c‘,‘d‘,‘e‘};

string strA=new string(arr);//這裡只列舉一種

注意:沒有String str=new String("abcde");這樣的構造,string 是 .NET Framework 中String的別名。

3.string參數傳遞

string是參考型別,我們試圖在一個函數裡改變這個值

static void Main(string[] args){    string strA = "abcde";    Deal(strA);    Console.WriteLine(strA);    Console.ReadLine();}static void Deal(string str){    str = str.Substring(0, 2);}

結果:abcde

原因:通過值傳遞參考型別的參數時,有可能更改引用所指向的資料,如某類成員的值。但無法更改引用本身的值,通過ref關鍵字傳遞參數可解決該問題。

static void Main(string[] args){     string strA = "abcde";     Deal(strA);     Console.WriteLine(ref strA);     Console.ReadLine();}static void Deal(ref string str){     str = str.Substring(0, 2);}

結果:ab

此時傳遞的是引用本身,而不是副本

4.null 字串和Null 字元串

null 字串:沒有分配記憶體;Null 字元串分配了記憶體,但記憶體裡面沒有資料.

static void Main(string[] args){    string strA = "1";    string strB = string.Empty;    string strC = null;    Console.WriteLine(int.Parse(strA));//正確    Console.WriteLine(int.Parse(strB));//輸入字串的格式不正確    Console.WriteLine(strC.ToString());//未將對象引用設定到對象的執行個體。    Console.ReadLine();}

內建方法字串是否為 null 或為空白:
IsNullOrEmpty等同於 if (str == null || str.Equals(String.Empty))
IsNullOrWhiteSpace等同於  if (str == null || str.Equals(String.Empty) || str.Trim().Equals(String.Empty)) 

5.StringBuilder

string strA="abc"for(int i=0;i<10000;i++){    strA+="abc";}Consolse.WriteLine(strA);

儘管該代碼會出現以使用字串串聯來將新的字元追加到命名為 strA 的現有字串,它實際上會為每個串聯操作建立新的 String 對象。大大的降低了效能。可使用 StringBuilder 類代替String 類多次更改字串值,StringBuilder 對象是可變的,當進行追加或刪除字串中的子字串時,不會建立新的對象,而是在原來的對象上進行修改。 完成 StringBuilder 對象的值的修改後,可以調用其 StringBuilder.ToString 方法將其轉換為字串


StringBuilder strA=new StringBuilder();for(int i=0;i<10000;i++){strA.Append("abc");}Consolse.WriteLine(strA.ToString());

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.