C#string详解_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#string详解

C#string详解

 2014/8/19 19:21:19  暮雨冰蓝  程序员俱乐部  我要评论(0)
  • 摘要:平时用的最多的莫过于string了,但有时遇到的一些问题,不仔细想还真容易出错,今天我就来总结一下string的用法。1.string是一个引用类型,平时我们比较string对象,比较的是对象的值而不是对象本身如:stringstrA="abcde";stringstrB="abc";stringstrC="de";Console.WriteLine(strA==(strB+strC));//trueConsole.WriteLine((object)strA==(object)
  • 标签:C# 详解

平时用的最多的莫过于string了,但有时遇到的一些问题,不仔细想还真容易出错,今天我就来总结一下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");这样的构造,class="input">string</span></span> type represents a sequence of zero or more Unicode characters.">Framework.">string 是 .NET Framework 中String的别名。

3.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

此时传递的是引用本身,而不是副本

4.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)) 

5.StringBuilder

string strA="abc"
for(int i=0;i<10000;i++)
{
    strA+="abc";
}
Consolse.WriteLine(strA);

尽管该代码会出现以使用字符串串联来将新的字符追加到命名为 strA 的现有字符串,它实际上会为每个串联操作创建新的 String 对象。大大的降低了性能。可使用 StringBuilder 类代替String 类多次更改字符串值,operation acts on the numeric value of each <span><span class="mtpsTagOuterHtml" ><span>Char</span></span></span> object.">StringBuilder 对象是可变的,当进行追加或删除字符串中的子字符串时,不会创建新的对象,而是在原来的对象上进行修改。 完成 StringBuilder 对象的值的修改后,可以调用其 StringBuilder.ToString 方法将其转换为字符串



StringBuilder strA=new StringBuilder();
for(int i=0;i<10000;i++)
{
strA.Append("abc");
}
Consolse.WriteLine(strA.ToString());

                    
                
发表评论
用户名: 匿名