程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 淺談String類型

淺談String類型

編輯:C#入門知識

首先,我們要知道的是String類型是一個引用類型,它的基類是Object。並且它的內容是只讀的。

我們有時候經常會看到兩個字符串類型,一個是“Sting”,一個是“string”。大寫的String是System.String,也就是 公共語言規范(Common Language Specification) CLS 所定義的字符串類型;小寫的string則是C#自己的字符串類型;最終C#編譯器還是會把它和System.String聯系起來。

例如:

 a = = ;

我們來簡單分析下這兩段代碼:

1.第一段代碼,首先會在托管堆上分配一塊內存,用來存儲“a”,然後將該對象的首地址保存到變量a中。(如果駐留池中有“a”,就可以直接取出)

2.第二段代碼,會在托管堆上重新分配一塊內存,用來儲存“abc”,然後修改變量a的值,使它指向該對象的首地址。

需要注意的是,string類型提供了許多的靜態和實例的方法,比如ToUpper,Concat等;這些方法都返回一個新的字符串。這些新的字符串要麼是新建的,要麼是從字符串駐留池中去出來的,與原字符串無關。

 

好了,現在讓我們來看看“字符串駐留池”(Intern Pool)。顧名思義,凡是看到什麼什麼池之類的東西,都能猜到字面肯定存著許多對象,就是為了反復使用,避免我們自己重新new。每個進程都有自己的字符串駐留池,所以i它們之間互不影響。

我們先來看一個例子:

 a1 =  a2 = ; 
 a3 =  (, 

我們運行完這段代碼之後就可以得到,第一輸出True,第二個輸出False。輸出True,是因為直接使用的駐留池中的字符串;但是為什麼第二個輸出是False呢?

因為:CLR在程序執行的時候,首先會把嵌入到源代碼中的文本常量字符串加入到“字符串駐留池”中;但是,程序中動態創建的字符串卻不會被加入。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved