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)}" ) ;
}