C# 引用类型和值类型
概念:
参考链接:http://www.cnblogs.com/xiaobudong/p/6687259.html
参考链接:http://www.cnblogs.com/renyiqiu/p/6435261.html
个人总结:
static void Main(string[] args) { int a = 1; int b = a; a = 2; Console.WriteLine("a的值:a="+ a + ";b的值为:b="+b); string stra = "hello"; string strb = stra; stra = "world"; if (stra.Equals(strb)) Console.WriteLine("a的值:stra=" + stra + ";strb的值为:strb=" + strb); Console.WriteLine("Reference equal for string: " + Object.ReferenceEquals(a, b)); //false Console.WriteLine("Reference equal for string: " + Object.ReferenceEquals(stra, strb)); //true Console.ReadKey(); }
结果:
注:Object.ReferenceEquals:确定指定的 System.Object 实例是否是相同的实例,返回结果:如果 objA 是与 objB 相同的实例,或者如果二者都为空引用,则为 true;否则为 false。
总结:
当变量为值类型时,系统在栈上为a和b分配了不同的存储空间;当变量为引用类型时,系统为stra和strb分配了相同的存储空间。