????????C#?е?????
??????C#???????????????????????????????????????????System.Object?????????е??????????????System.Object??У??????????????????System.Object???????????System.ValueType????String??????е???????????????????????????????Щ??????е???????????
????????C# String
????1????????

????????????????????????
static void Main(string[] args)
{
string str1 = "string";
string str2 = str1;
Console.WriteLine(object.ReferenceEquals(str1?? str2));
str2 += "change";
Console.WriteLine(object.ReferenceEquals(str1?? str2));
Console.ReadKey();
}
????????????True??False??????????????????IL??
.entrypoint
// ??????С       48 (0x30)
.maxstack  2
.locals init ([0] string str1??
[1] string str2)
IL_0000:  nop
IL_0001:  ldstr      "string"
IL_0006:  stloc.0
IL_0007:  ldloc.0
IL_0008:  stloc.1
IL_0009:  ldloc.0
IL_000a:  ldloc.1
IL_000b:  ceq
IL_000d:  call       void [mscorlib]System.Console::WriteLine(bool)
IL_0012:  nop
IL_0013:  ldloc.1
IL_0014:  ldstr      "change"
IL_0019:  call       string [mscorlib]System.String::Concat(string??string)
IL_001e:  stloc.1
IL_001f:  ldloc.0
IL_0020:  ldloc.1
IL_0021:  ceq
IL_0023:  call       void [mscorlib]System.Console::WriteLine(bool)
IL_0028:  nop
IL_0029:  call       valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()
IL_002e:  pop
IL_002f:  ret
????+=???????????Concat????????str2??"change"?????????????????????μ?????????????????????????????Trim??Remove????????????????????μ???????????????壬??????
??????????????????????????????????κθ??????????????????????????????????μ??????????????????У????????????????????????????2????????μ????????????????棬?????????????????GC????????????????????????????????????????????Σ???????.Net?????????????????????????????????????
?????????????????????????????????????????á???????μ???????????????????????в???????????????????????????????????????????????????????????????????????????????????????????μ?????
????2??????????????????
???????????????????У?????????????????????????????????????????????????????????????????????????????????и?????ò?????????????????亯??????????????????
static void Main(string[] args)
{
People people = new People() { Name = "Jack" };
Console.WriteLine(people.Name);
Change(people);
Console.WriteLine(people.Name);
Console.ReadKey();
}
static void Change(People p)
{
p.Name = "Eason";
}
class People
{
public string Name { get; set; }
}
?????????????Jack???????Eason??????????????????????????????????????????????????????????????????????
?????????????????String??????????????
static void Main(string[] args)
{
string str = "string";
Console.WriteLine(str);
Change(str);
Console.WriteLine(str);
Console.ReadKey();
}
static void Change(string str)
{
str = "change";
Console.WriteLine(str);
}
??????????string??change??string??????Change??????str???????"string"????????????????????????Change?????ж?str???и???????′???????μ??????????????????μ?????????á?????????????????????????????????????????????????????????
????3??????????
???????????????
string str1 = "string";
string str2 = "string";
string str3 = "stringstring";
string str4 = "string" + "string";
string str5 = str1 + "string";
Console.WriteLine(ReferenceEquals(str1?? str2));
Console.WriteLine(str1 == str2);
Console.WriteLine(ReferenceEquals(str3?? str4));
Console.WriteLine(str3 == str4);
Console.WriteLine(ReferenceEquals(str3?? str5));
Console.WriteLine(str3 == str5);
Console.ReadKey();
????????????????????True??True??True??True??True??True???????????True??True??True??True??False??True??str3??str5??????????????????????????????????????????IL???????str5??IL?????е?????Concat??????str1??"string"???????????????Concat????????????????
public static string Concat(string str0?? string str1)
{
if (IsNullOrEmpty(str0))
{
if (IsNullOrEmpty(str1))
{
return Empty;
}
return str1;
}
if (IsNullOrEmpty(str1))
{
return str0;
}
int length = str0.Length;
string dest = FastAllocateString(length + str1.Length);
FillStringChecked(dest?? 0?? str0);
FillStringChecked(dest?? length?? str1);
return dest;
}
????FastAllocateString??????????????str0.Length+str1.Length????????dest??FillStringChecked???str0??str1?????dest?У?????????str0??str1??????????????????????????????????в??????????dest???????????????????????????μ????????????????????????????????????????????????μ????????????顣
?????????????????????????μ??????????????????????????????????????????????????????IL????
IL_0001:  ldstr      "string"
IL_0006:  stloc.0
IL_0007:  ldstr      "string"
IL_000c:  stloc.1
IL_000d:  ldstr      "stringstring"
IL_0012:  stloc.2
IL_0013:  ldstr      "stringstring"
IL_0018:  stloc.3
IL_0019:  ldloc.0
IL_001a:  ldstr      "string"
IL_001f:  call       string [mscorlib]System.String::Concat(string??string)
IL_0024:  stloc.s    str5
IL_0026:  ldloc.0
IL_0027:  ldloc.1
????str3??str4??????????????????"stringstring"??str3????str4???????????str4?????????????????????????str3????????CLR??str3??????????str4??????str3??str4???????????
????????"=="??????????????????True?????"=="???????????String.Equal??????IL???????£?
????IL_0032:  call       bool [mscorlib]System.String::op_Equality(string??string)
????op_Equality??????String.Equal??????Equal???????????????????????????????????????????????????б???????????λ?????