
//看看字符串的特殊之处值类型与引用类型的区别 public static void CompareString(string stra, string strb, int i) { #region 总结 :值类型与引用类型的区别 /* string 是引用类型,但在使用时有表现出一些值类型的特点 string 是只读的,不能修改该对象实例的值,实际操作中对 该对象的修改返回的是该对象的新的实例。 string 对象保留在堆上,而不是栈上。 当相同的字符串赋值到两个string变量时,会得到相同的内存 中的字符串的两个引用,这样可以提高效率 字符串是经常使用的基本数据类型并且是只读的类型,没有必要 把相同的字符串在内存中保留多个副本【只要保留引用就行了】 * 值类型的数据存储在内存的栈中,引用类型的数据存储在内存中的堆中 * 而内存单元中只存放堆中对象的地址 * * 内存结构图 * 值类型存取速度快,引用类型存取速度慢 * 值类型表示实际的数据,引用类型表示指向存储在内存堆中的数据的指针或引用 * * 值类型继承自System.ValueType,应用类型继承自object * * 栈内存的分配是自动释放,而在.NET中会有GC释放 * 值类型不能直接赋值null,引用类型可以 */ #endregion bool result = false; switch (i) { : result = string.Equals(stra, strb); break; : result = string.ReferenceEquals(stra, strb); break; : strb += "o"; result = string.Equals(stra, strb); break; : strb += "o"; result = string.ReferenceEquals(stra, strb); break; } if (result) { Console.WriteLine("字符串与字符串是一致的!!!"); } else { Console.WriteLine("字符串与字符串是不一致的!!!"); } }