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个相同值相等的字符串就对应同一个内存地址;