using System;using System.Collections.Generic;using System.Text;
namespace String._002{ class Program { static void Main(string[] args) { string s = "Hello"; string t = (string)s.Clone(); // 不复制;s 和 t 引用同一个字符串 //相当于 string t = "Hello"也相当于string t = s; bool testbool = (object)s == (object)t; Console.WriteLine(testbool); //true
string u = string.Copy(s); // 进行复制,s 和 u 引用不同的对象 Console.WriteLine(s == u);// true 判别str的值是否和strCopy的值是否相等//实际上是值比较
Console.WriteLine((object)s == (object)u);// false 判别str所指的对象是否和strCopy所指的对象相同 //实际上是比较两个引用是否相等,也是比较地址是否相等
Console.WriteLine(Object.ReferenceEquals(s, t));// true 判别s所指的对象是否和t所指的对象相同 //实际上是比较两个引用是否相等,也是比较地址是否相等
Console.WriteLine(Object.ReferenceEquals(s, u));// false 判别s所指的对象是否和u所指的对象相同 //实际上是比较两个引用是否相等,也是比较地址是否相等
Console.WriteLine(s.Equals(t)); //true Console.WriteLine(Equals(s, t)); //true
Console.WriteLine(s.Equals(u)); //true Console.WriteLine(Equals(s, u)); //true
int a = 8; int b = 8; Console.WriteLine((object)a == (object)b);//false 比较的是引用 Console.WriteLine(ReferenceEquals(a, b)); //false 比较的是引用 Console.WriteLine(a.Equals(b)); //true 比较的是值和类型 Console.WriteLine(Equals(a, b)); //true 比较的是值和类型
string ret = string.Format("s same as t: {0}, s same as u: {1}", Object.ReferenceEquals(s, t), (object)s == (object)u); Console.WriteLine(ret);
Console.ReadKey();
} }}