C# の string オブジェクトの参照値

C#の文字列型(object)の参照についていくつか試してみた結果

記事にあったもの
  1. static void Main(string[] args)  
  2. {  
  3.     string a = "hello";  
  4.     string b = "h";  
  5.     b += "ello";  
  6.   
  7.     Console.WriteLine(a == b); // True  
  8.     Console.WriteLine(object.ReferenceEquals(a, b)); // Flase  
  9. }  

実データはコピーされず、参照先が同じになります
  1. static void Main(string[] args)  
  2. {  
  3.     string a = "hello";  
  4.     string b = a;  
  5.   
  6.     Console.WriteLine(a == b); // True  
  7.     Console.WriteLine(object.ReferenceEquals(a, b)); // True  
  8. }  

コンパイラの最適化によるものだろうか、定数はまとめられるらしい
  1. static void Main(string[] args)  
  2. {  
  3.     string a = "hello";  
  4.     string b = "he" + "llo";  
  5.   
  6.     Console.WriteLine(a == b); // True  
  7.     Console.WriteLine(object.ReferenceEquals(a, b)); // True  
  8. }  
  1. static void Main(string[] args)  
  2. {  
  3.     string a = "hello";  
  4.     string b = Hello();  
  5.   
  6.     Console.WriteLine(a == b); // True  
  7.     Console.WriteLine(object.ReferenceEquals(a, b)); // True  
  8. }  
  9.   
  10. static string Hello()  
  11. {  
  12.     string s = "hello";  
  13.     return s;  
  14. }  

コメント