c#String对内存的分配管理
在C#语言中,字符串是System.String类的一个引用类型,但与其他引用类型不同。
C#将字符串视为一个基本类型,它可以申请为一个常量,也可以直接给它赋值。
由于C#中的字符串是由System.String类派生而来的引用对象,因此可以使用String类的方法来对字符串进行各种操作。
public class OtherClass
{
public string teacherOther = "Eleven";
public string teacherPlus = "Elev" + "en";
}
引用类型间的内存
{
string teacherOpen = "Eleven";
string teacherVip = "Eleven";
Console.WriteLine($"object.ReferenceEquals(teacherOpen,teacherVip)==={object.ReferenceEquals(teacherOpen, teacherVip)}");
Console.WriteLine($"object.ReferenceEquals(teacherOpen,new OtherClass().teacherOther)==={object.ReferenceEquals(teacherOpen, new OtherClass().teacherOther)}");
}
部分分配时的内存
{
Console.WriteLine("***************************************");
string teacherFormat = string.Format("Ele{0}", "ven");
string lastPart = "ven";
string teacherCombination = "Ele" + lastPart;
Console.WriteLine($"object.ReferenceEquals(teacherOpen,teacherFormat)...{object.ReferenceEquals(teacherOpen, teacherFormat)}");
Console.WriteLine($"object.ReferenceEquals(teacherOpen,teacherCombination)...{object.ReferenceEquals(teacherOpen, teacherCombination)}");
Console.WriteLine($"object.ReferenceEquals(teacherFormat,teacherCombination)...{object.ReferenceEquals(teacherFormat, teacherCombination)}");
}
编译器优化的内存
{
Console.WriteLine("***************************************");
string teacherPlus = "Ele" + "ven";
Console.WriteLine($"object.ReferenceEquals(teacherOpen,teacherPlus)...{object.ReferenceEquals(teacherOpen, teacherPlus)}");
Console.WriteLine($"object.ReferenceEquals(teacherOpen,new OtherClass().teacherPlus)...{object.ReferenceEquals(teacherOpen, new OtherClass().teacherPlus)}");
Console.WriteLine($"object.ReferenceEquals(teacherPlus,new OtherClass().teacherPlus)...{object.ReferenceEquals(teacherPlus, new OtherClass().teacherPlus)}");
}