1,首先String是一個類,string只是String類的一個別名,別名的意思:另外一個代號,就是和String同樣使用。數組
2,string str=「abc」,和char[] cha={'a','b','c'}的不一樣。你們不要簡單認識一個字符串就是一個字符數組。要理解本質。函數
就是字符串的不變性,string只是可讀,但不可寫。但字符數組可讀可寫。post
可讀:字符串中的str[0]=a str[1]=b str[2]=c,字符中的str[0]=a str[1]=b str[2]=c,this
可寫:字符串裏的元素是不可寫的spa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Program
{
static
void
Main(
string
[] args)
{
char
[] cha = {
'a'
,
'b'
,
'c'
};
Console.WriteLine(cha[0]);
cha[0] =
'b'
;
Console.WriteLine(cha);
string
str =
"abc"
;
Console.WriteLine(str[0]);
// str[0] = 'd';
Console.ReadKey();
}
|
若str[0]='d';將會報「錯誤 1 沒法對屬性或索引器「string.this[int]」賦值 -- 它是隻讀的「字符數組能夠。 調試
這裏有人提出,str=「abc」;str+=「d」,Console.WriteLine(str);出現abcd;這不是代表字符傳能夠更改嗎?可寫嗎?code
下面我們就針對這個問題自習分析一下。對象
看到這個圖,相比你們你們明白了字符串的不變性。再來個圖證實這個不變性。blog
3,這裏又一次證實了字符串不可變性,另外提出一個問題,那就是字符串的「暫存池」的概念。索引
string str=「abc」;string str1=「abc」二者指的是同一個對象。
可是這僅僅是string str=「abc」;string str1=「abc,而不是char[] cha={'a','b','c'}; string str=new string(cha);
在調試的時候打開監視窗口,輸入*變量,監視變量的地址,二者是同一地址,證實指向的同一變量。下圖不一樣地址,天然不一樣變量。
總結,處理字符串 必定要有接受他的返回值,由於每處理一次,就會產生一個對象。
經常將字符串實例,ToCharArray();而後再調用string的(char[])構造函數。「修改」字符串中的元素。
問題:這裏會讓咱們想到值傳遞和引用傳遞的用法。之後再予更新。
4,
string str=null;
str="";
string str1=string.Empty;
string str2="";
string str3=「 」;//有個空格
運行過str=null後,str的地址沒有變化,依然是0x00000000,因此說,沒有分配內存空間。
運行完後,如上圖顯示,證實string.Empty和「」是同樣的,固然也和先賦null,再「」同樣。可是擁有一個空格字符就不一樣了。
//string a = "abc"; //char[] ch = { 'a', 'b', 'c' }; //string a = new string(ch); string a = "abc"; string b = a; b+="def"; Console.WriteLine(a);//abc //new方法獲得同樣的結果 Console.WriteLine(b);//abcdef Console.ReadKey();