APP下载

C#语言中数组与字符串存储、使用方式异同的比较

2019-12-13吴昊李晓会

数字技术与应用 2019年9期
关键词:字符串数组

吴昊 李晓会

摘要: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

猜你喜欢

字符串数组
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
辨析指针数组与数组指针
Excel数组公式在林业多条件求和中的应用
最简单的排序算法(续)
寻找勾股数组的历程
一种新的基于对称性的字符串相似性处理算法
高效的top-k相似字符串查询算法
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案