C# String與string的區別

最近,正在簡單地學習C#的一些知識。c#

C#是區分大小寫的,可是我卻發現C#中同時存在String與string,因而我很困惑,因而我上網搜索了一下,因而我瞭解了一些小知識。數組

MSDN中對string的說明:string is an alias for String in the .NET Framework。string是String的別名而已,string是c#中的類,String是Framework的類,C# string 映射爲 Framework的 String。若是用string,編譯器會把它編譯成String,因此若是直接用String就可讓編譯器少作一點點工做。

若是使用C#,建議使用string,比較符合規範 。 string始終表明 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的時候而且當前命名空間中沒有名爲String的類型(class、struct、delegate、enum)的時候才表明System.String。函數

string是關鍵字,String不是,也就是說string不能做爲類、結構、枚舉、字段、變量、方法、屬性的名稱,而String能夠。學習

今天忽然用到C#的string,忽然想起來一直沒弄明白string和String有什麼區別,查了一下電子書、MSDN以及百度和Google,更進一步看看String的一些問題。spa


問題:

1. C#究竟是何時傳引用?何時傳值?
2. String傳值仍是傳引用
3. string和String有什麼區別?
4. String爲何是Immutable,怎麼實現的?

如下查詢結果以及個人理解:code

1. C#究竟是何時傳引用?何時傳值?
傳值的狀況 :Struct、Enumeration、Numeric(Integral/Floating/decimal)、bool
傳引用的狀況:class、Delegate、Interface

當使用操做符"="以及函數傳參數的時候:
 傳值的結果是把原對象複製了一份,接收者指向原對象。
 傳引用的結果是直接讓接收者指向原對象。
有人說,我硬要把值當引用傳怎麼辦?
a、用ref關鍵字
b、用數組,數組是class

c、涼拌:)對象



2. String傳值仍是傳引用
C#的String聲明是class String,固然是傳引用。
不過,之因此有這個疑惑,多數是由於這個狀況:
string a = "aaa";
string b = a;
b = "bbb";

或者是這麼幾行代碼ci

public void Swap(string s1, string s2)
{
 string temp=s1;
 s1=s2;
 s2=temp;
}

這時候結果一打印,結果發現a的值尚未變,Swap也沒有成功,這時候就會有幻覺:是否是沒有傳引用啊?
呵呵,string不會這麼粗暴的打亂「聲明爲class就是傳引用」這種規則的。
分析一下:
string a = "aaa"; //==> a----->new String("aaa")
string b = a; //==> b----->a, 傳引用
b = "bbb"; //==> b----->new String("bbb"), 傳引用,b指向了一個新的字符串,a並無變。


Swap函數也是這樣,好比說傳了a, b進去(a="aaa", b="bbb"),
//s1----->a, s2----->b
 string temp=s1;//temp----->s1----->a
 s1=s2; //s1----->s2----->b;
 s2=temp; //s2----->temp----->a


結果是,s1和s2確實是Swap了,可是這種結果並不會影響到a和b

3. string和String有什麼區別?
MSDN中對string的說明:string is an alias for String in the .NET Framework
呵呵string是String的別名而已,都是一家。

4. String爲何是Immutable,怎麼實現的?
immutable:對象一旦生成不可改變
關於怎麼實現的,在明白了問題2以後很好辦,只要不提供任何修改本身成員變量的方法就能夠了。順便聲明爲sealed,防止不清楚的後來者違反規定:)
String每一個看似修改了成員變量的方法,事實上都返回了一個新的String。
好比String.Replace函數,事實上並無改變原來的串,這也是爲何只有讓str = str.Replace(   foo, bar   )才真正完成替換的緣由。
相關文章
相關標籤/搜索