title: Groovy GStringImpl and String behaviour
body: <p>I've recently been reading about the behavior of <code>GStringImpl</code>s vs <code>String</code>s when used in collections in Groovy.</p>
  
  <p>I understand that the reason this evaluates to false...</p>
  
  <p><code>"${'test'}".equals("test") == false</code> </p>
  
  <p>is due to the symmetry requirement of the <code>.equals()</code> contract, however I was wondering if there was a reason the <code>GStringImpl</code> couldn't just be evaluated to a <code>String</code> immediately. So when I do something like this...</p>
  
  <p><code>"${'someString'}"</code></p>
  
  <p>I don't get a <code>GStringImpl</code>, I just get a plain Java <code>String</code> back, which I can immediately use as the key in a map, for example.</p>
  
  <p>I know there are some workarounds, like </p>
  
  <p><code>String s = "${'someString'}"</code></p>
  
  <p>however stuff like this is a bit inconvenient, and the mix-up between <code>GStringImpl</code> and <code>String</code> seems to be a big 'gotcha' for Groovy newbies.</p>