c# string的内存分配

string和String的区别

在c#中string是个特殊的存在,介于引用类型和值类型之间,string就是String的一个别名而已,没有其他区别。

string的创建方式

      // 声明但不初始化,此时内存还没分配  
      string msg1;
      // 声明并初始化为 null,此时内存还没分配 
      string msg2 = null;
      //此时分配了内存空间,只是为空。
      string msg=""
      // 作为一个空字符串进行初始化,相当于""
      string msg3 = String.Empty;
      // 也可以使用 System.String
      String content = "Hello World!";
      // 使用 const 防止 msg4 被篡改
      const string msg4 = "I'm const!";
      // 可以使用隐式类型 var
      var msg5 = "Hi!";
      // 使用 String 构造器进行初始化
      char[] letters = { 'A', 'B', 'C' };
      string alphabet = new String(letters);
      Console.Read();

string创建的方式和类型比较

一般来说==是用于值类型的比较,而Equals用于字符串的比较,由于string类型比较特殊,如下:

string a="a";

string b="a";

char[] c={'a'};

string d=new string(c);

string e=new StringBuilder().Append("a").ToString();

这几种创建方式不同,导致比较结构也不同

c#中的string判断

 string stringD = "   ";//空白字符串

 var resultD1 = string.IsNullOrEmpty(stringD);//false
 var resultD2= string.IsNullOrWhiteSpace(stringD);//true

c#使用equal与==区别

判断相等有两种方式,一种是传统的==操作,一种是object提供的Equals方法。二者的区别在于:

一、==操作符判断的是堆栈中的值,Equlas判断的是堆中的值。

C#提供值类型和引用类型,值类型存储在栈上,故用==判断是直接判断其值是否相等,因为值类型不存在堆中的数据,因此值类型的Equals也是判断数据。即,对于值类型而言,==与Equals相同,均是判断其值是否相等。

对于引用类型而言,其栈中存储的是对象的地址,那么==就是比较两个地址是否相等,即是否指向同一个对象;Equals函数则是比较两个对象在堆中的数据是否一样,即两个引用类型是否是对同一个对象的引用。

二、String类型特殊

String类型虽然是引用类型,但是对String对象的赋值却按照值类型操作。

例如:

String s1="test";
String s2="test";

对s2初始化的时候,并没有重新开辟内存,而是直接将其地址指向s1的内容“hello”。这样一来,string类型虽然是引用类型,但是其==操作和Equals操作都是一样的,均比较值是否相等。

string的实质:

(1)属于基本数据类型;

(2)是引用类型;

(3)只读;

(4) string a="1123";

            string b="1123";

那么a和b指向同一个内存地址;

但是并非2个相同值相等的字符串就对应同一个内存地址;

猜你喜欢

转载自blog.csdn.net/qq_40677590/article/details/102866376
今日推荐