title: Are string.Equals() and == operator really same?
body: <p>Are they really same? Today, I ran into this problem. Here is the dump from the Immediate Window:</p>
  
  <pre><code>?s 
  "Category" 
  ?tvi.Header 
  "Category" 
  ?s == tvi.Header 
  false 
  ?s.Equals(tvi.Header) 
  true 
  ?s == tvi.Header.ToString() 
  true 
  </code></pre>
  
  <p>So, both <code>s</code> and <code>tvi.Header</code> contain "Category", but <code>==</code> returns false and <code>Equals()</code> returns true.</p>
  
  <p><code>s</code> is defined as string, <code>tvi.Header</code> is actually a WPF <code>TreeViewItem.Header</code>. So, why are they returning different results? I always thought that they were interchangable in C#.</p>
  
  <p>Can anybody explain why this is?</p>