C#中string用法实例详解
在进行c#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下c#中string的用法。具体如下:
1.string是一个引用类型,平时我们比较string对象,比较的是对象的值而不是对象本身
如下面代码所示:
string stra="abcde"; string strb="abc"; string strc="de"; console.writeline(stra == (strb+strc));//true console.writeline((object)stra == (object)(strb+strc));//false
因为字符串内容相同但引用的不是同一个实例
2.string对象是不可修改的
如下代码所示:
string stra="abcde"; stra="aaaaa";
从表面上看似修改了stra的内容,事实上"abcde"没有被修改,而是从新创建了一个对象"aaaaa",然后把该对象的引用赋给stra,最后"abcde"会被作为垃圾回收。
3.string的创建
直接赋值:
string stra="abcde";//创建一个内容为abcde的string对象,然后将该对象的引用赋给stra
构造:
char[] arr={'a','b','c','d','e'}; string stra=new string(arr);//这里只列举一种
注意:没有string str=new string("abcde");这样的构造,string 是 .net framework 中string的别名。
4.string参数传递
string是引用类型,我们试图在一个函数里改变这个值
测试代码如下:
static void main(string[] args) { string stra = "abcde"; deal(stra); console.writeline(stra); console.readline(); } static void deal(string str) { str = str.substring(0, 2); }
运行结果:abcde
原因是通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。但无法更改引用本身的值,通过ref关键字传递参数可解决该问题。
修正后的代码如下:
static void main(string[] args) { string stra = "abcde"; deal(stra); console.writeline(ref stra); console.readline(); } static void deal(ref string str) { str = str.substring(0, 2); }
结果:ab
此时传递的是引用本身,而不是副本
5.null 字符串和空字符串
null 字符串:没有分配内存;空字符串分配了内存,但内存里面没有数据.
测试代码如下:
static void main(string[] args) { string stra = "1"; string strb = string.empty; string strc = null; console.writeline(int.parse(stra));//正确 console.writeline(int.parse(strb));//输入字符串的格式不正确 console.writeline(strc.tostring());//未将对象引用设置到对象的实例。 console.readline(); }
内置方法字符串是否为 null 或为空:
isnullorempty等同于 if (str == null || str.equals(string.empty))
isnullorwhitespace等同于 if (str == null || str.equals(string.empty) || str.trim().equals(string.empty))
6.stringbuilder
现看如下测试代码:
string stra="abc" for(int i=0;i<10000;i++) { stra+="abc"; } consolse.writeline(stra);
尽管该代码会出现以使用字符串串联来将新的字符追加到命名为 stra 的现有字符串,它实际上会为每个串联操作创建新的 string 对象。大大的降低了性能。可使用 stringbuilder 类代替string 类多次更改字符串值,stringbuilder 对象是可变的,当进行追加或删除字符串中的子字符串时,不会创建新的对象,而是在原来的对象上进行修改。 完成 stringbuilder 对象的值的修改后,可以调用其 stringbuilder.tostring 方法将其转换为字符串
修改后的测试代码如下:
stringbuilder stra=new stringbuilder(); for(int i=0;i<10000;i++) { stra.append("abc"); } consolse.writeline(stra.tostring());
相信本文所述实例对于大家牢固掌握c#的string用法能起到一定的帮助和借鉴作用。