关于string的对象引用

什么都不说了, 一切都在代码里:

 1               string  a1  =   " aaa " ;   //  在堆中分配"aaa"
 2                 string  a2  =   " aaa " ;   //  堆中已有"aaa", 则不再给"aaa"分配新空间,a2指向a1的地址
 3               string  a3  =   new   string ( " aaa " .ToCharArray());  //  new产生新的对象,分配新的空间
 4 
 5              Console.WriteLine( object .ReferenceEquals(a1,  " aaa " ));  // Ture
 6              Console.WriteLine( object .ReferenceEquals(a1, a2));     // True
 7              Console.WriteLine( object .ReferenceEquals(a1, a3));     // False
 8 
 9               string  b1  =   " bbb " ;
10 
11               string  c1  =   " aaabbb " ;         //  定义"aaabbb"
12               string  c2  =   " aaa "   +   " bbb " ;    //  "aaa"和"bbb"都是常量, 合成为"aaabbb"指向c1
13               string  c3  =  a1  +   " bbb " ;       //  a1是变量, 则给c3分配新的空间
14               string  c4  =  a1  +  b1;          //  同上, c4分配新的空间
15               string  c5  =  a1  +  b1;          //  同上, c5分配新的空间
16 
17              Console.WriteLine( object .ReferenceEquals(c1, c2));   // True
18              Console.WriteLine( object .ReferenceEquals(c1, c3));   // False
19              Console.WriteLine( object .ReferenceEquals(c1, c4));   // False
20              Console.WriteLine( object .ReferenceEquals(c3, c4));   // False
21              Console.WriteLine( object .ReferenceEquals(c5, c4));   // False

转载于:https://www.cnblogs.com/Freeway/archive/2010/04/04/stringRef.html