static void StrChange(StringBuilder str)
{
str.Append("2");
}
static void Main()
{
StringBuilder str = new StringBuilder("1");
StrChange(str);
Console.WriteLine(str);
}
//输出 12
//这个StringBuilder类为什么没有克隆这个方法呢。 static void StrChange(string str)
{
str = "2";
}
static void Main()
{
string str = "1";
StrChange(str);
Console.WriteLine(str);
}
//输出 1
//是不是string 当做值类型来用呢。如代码,还有请问一下,.NET 还有没有类似于 string 这样的只读引用类型?
static void StrChange(string str)
{
str = "2";//因为str是只读的,所以给他赋值实际是重新的另一个对象!这个等于2的对象应该 和等于1的不是同一个对象!
}
static void Main()
{
string str = "1";//str对象
StrChange(str);
Console.WriteLine(str);//应该输出1
}
而在main中,str的指向的是“1”的内存地址。这个没变啊。
你看看下面的吧
1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
2. 值类型存取速度快,引用类型存取速度慢。
3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
4. 值类型继承自System.ValueType,引用类型继承自System.Object
5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
C#中基本数据类型是值类型,结构也是值类型。而数组、类、接口、字符串都是引用类型。
值类型:简单类型、枚举类型和结构类型
简单类型分为:除字符串外的都是简单类型。有:整型(有符号和无符号数)、浮点(float、double)、字符(char)、高精度小数(decimal)和布尔
引用类型:类(object、class)、接口(interface)、字符串(string)、数组(int[] string[])和委托(delegate)。