title: WeakReference wrapping a string causes strange behavior
body: <p>I know that i should use WeakReference just for large objects, but I am curious about the following scenario:</p>
  
  <pre><code>object obj = 1; //Int32
  
  var wk = new WeakReference(obj);
  
  Console.WriteLine(wk.IsAlive); //Prints: True
  
  obj = null;
  
  GC.Collect(2, GCCollectionMode.Forced, true);
  
  Console.WriteLine(wk.IsAlive); //Prints: false, All Rigth!
  </code></pre>
  
  <p>So far it's alright.</p>
  
  <p>Look this:</p>
  
  <pre><code>object obj = "test"; //String
  
  var wk = new WeakReference(obj);
  
  Console.WriteLine(wk.IsAlive); //Prints: True
  
  obj = null;
  
  GC.Collect(2, GCCollectionMode.Forced, true);
  
  Console.WriteLine(wk.IsAlive); //Prints: True, Why?
  </code></pre>
  
  <p>what's going on?</p>