吳昊 李曉會

摘要:C#語言中,數組和字符串在使用方面既有相似之處,又有明顯差異。掌握兩者的異同,對于深入理解C#語言語法以及使用C#進行軟件開發,保證開發順利進行都有重要意義。在教學過程中,對兩者異同的比較剖析,能夠使學生更好地了解和掌握C#語言,進一步使用C#語言進行程序設計和軟件開發。
關鍵詞:C#;數組;字符串;存儲方式
中圖分類號:TP311.1 文獻標識碼:A 文章編號:1007-9416(2019)09-0148-01
C#語言是微軟公司在其開發的.NET平臺上主推的一種面向對象的程序設計語言,是計算機科學與技術等專業的一門重要課程。C#語言包含一套完整的語法、句法結構體系。而數組(Array)和字符串(String)作為C#語言中兩種重要的數據類型(數據結構),其定義、存儲和使用有很多特殊性。
在以往的教學中發現,當學生不能準確理解數組和字符串在存儲、使用方式上的差異時,對后續學習,例如將數組作為方法的參數,會有很大的影響。
針對以上問題,本文旨在通過對比來剖析C#語言中,數組和字符串的相同點和不同點,幫助學生準確掌握兩者的使用。
1 C#語言中數組與字符串屬于引用數據類型
在C#語言的語法體系中,數組與字符串都屬于和值類型相對應的引用數據類型,這是兩者的相同之處。引用類型與值類型,在定義、存儲和使用方式上有很多的不同之處。
1.1 代碼舉例----值類型與引用類型
為了比較以數組為代表的引用類型與值類型的區別,分析如下程序代碼:
int m=5,n;
n=m;
m=-2;
Console.Write(n);
這段代碼首先定義兩個int類型變量m和n。m的初始值為5。將變量m的值賦給n,再將m的值修改為-2。此時,變量m的值為-2,而n的值為5。
作為對比,再來看下面的代碼段。
int[] arr1 = { 1, 2, 3 }, arr2;
arr2 = arr1;arr1[0] = -10;
Console.Write(arr2[0]);
這段代碼首先定義兩個int類型數組變量arr1和arr2。arr1的初始值為{1,2,3}。將變量arr1的值賦給arr2,再將arr1的第一個元素(序號為0)值修改為-10。此時,arr1的第一個元素的值為-10,而arr2的第一個元素的值也會變為-10。
1.2 案例分析
對于兩個值類型變量的直接賦值(如上面第一段代碼中的語句n=m;),是在兩塊不同的棧內存之間完成數值的復制。因此當修改其中一個值類型變量值的時候,對另外一個不會產生影響。
于兩個引用類型變量的直接賦值(如上面第二段代碼中的語句arr2 = arr1;),是在棧內存之間完成用引用(該引用的值是保存在堆內存上的數值部分的首地址)部分的復制。復制的結果使得兩個數組變量名的引用部分是相同,即都指向同一塊保存在堆內存上的數值部分的首地址。因此當使用數組名稱修改堆內存上的數值時,對另一個數組引用會產生影響。
2 字符串與數組引用方式不同
雖然字符串與數組一樣,也屬于引用數據類型。但字符串在使用時,與數組有所不同。
2.1 代碼舉例----字符串與數組賦值操作的比較
分析下面一段代碼:
string s1 = "abc",s2;
s2 = s1;
s1 = "def";
Console.Write(s2);
這段代碼首先定義兩個字符串類型變量s1和s2。s1的初始值為"abc"。將變量s1的值賦給s2,再將s1的值修改為"def"。此時s2的值應該是什么呢?按照上述1.2節的分析,同樣作為引用類型的字符串,應該按照和數組操作相似的方式,s1和s2引用的地址相同,s1的值改變,s2的值也會發生相同改變。然而,事實并非如此。程序的實際運行結果如圖1所示。
2.2 案例分析
字符串作為一種常用的引用類型,也是非常特殊的引用類型。正如微軟MSDN中關于字符串說明所提到的,字符串(String)的值是“不可更改的”。即當修改一個字符串變量的值的時候,并不是將原來保存在堆內存上的值改變,而是另外開辟一塊新的堆內存保存新值,并將字符串變量在棧內存上的地址引用修改為新的堆內存的地址。因此案例代碼中變量s1指向新的堆內存中的新值,而s2仍然指向原堆內存中的原值。
3 結語
C#語言中,數組和字符串都屬于引用數據類型,其存儲方式有相同之處,即都在棧內存上存儲引用(地址),在堆內存上存儲數據;但由于數組的值允許更改,而字符串的值不允許修改,因此在對應類型變量賦值過程中,實際的運行方式不盡相同。而對于字符串而言,如果需要在原堆內存上直接修改數據,可以使用另一個描述字符串的類----StringBuffer來實現。
參考文獻
[1] 吳昊,等.C# Windows程序設計及應用[M].北京:清華大學出版社,2012.
[2] 侯鵬.C#中的字符串[J].電子世界,2014(16):86.
[3] 段春筍,杜立新.C#中動態數組設計原理[J].電腦編程技巧與維護,2005(07):24-25.
Abstract:In C# language, Arrays and strings have similarities,but obvious differences . It is significant that to understand the basic C# grammar and program by grasping the similarities and differences of arrays and strings.Duruing the teaching,it can help students master C# language deeply and use it to create application with the comparison of them.
Key words:C#;array;string;storage method