C#中关于String和new String的==、equals、referenceEquals
首先可以给出结论
- String虽然作为引用类型,但*==运算符*,比较的是值是否相等(new String和String一样)
- equals 也是同样比较的是字符串的值是否相等。
也就是说,Equals和==在C#中比较的都是字符串的值,这与java不一样
- referenceEquals不管比较什么类型的数据,比较的永远是该数据类型的引用。
过程如下
String s1 = "test";
String s2 = "test";
System.Console.WriteLine("s1和s2是同一个字符串" + (s1.Equals(s2)));//true
System.Console.WriteLine("ReferenceEquals"+String.ReferenceEquals(s1,s2));//True
String s3 = new String("test");
System.Console.WriteLine("s1和s3是同一个字符串" + (s1.Equals(s3)));//true
System.Console.WriteLine("ReferenceEquals"+String.ReferenceEquals(s1,s3));//False
String s4 = "tes" + "t";
System.Console.WriteLine("s1和s4是同一个字符串" + (s1.Equals(s4)));//true
System.Console.WriteLine("s3和s4是同一个字符串" + (s3.Equals(s4)));//true
System.Console.WriteLine("ReferenceEquals"+String.ReferenceEquals(s1,s4));//True
String s5 = new String("test");
System.Console.WriteLine("s3和s5是同一个字符串" + (s3.Equals(s5)));//true
System.Console.WriteLine("ReferenceEquals"+String.ReferenceEquals(s3,s5))//False