title: Passing non final objects to method references
body: <p>What is the explanation that <code>s.get()</code> returns <strong>"ONE"</strong> the second time as well?</p>
  
  <pre><code>String x = "one";
  Supplier&lt;String&gt; s = x::toUpperCase;
  System.out.println("s.get() = " + s.get());
  x = "two";
  System.out.println("s.get() = " + s.get());
  </code></pre>
  
  <p><strong>Update:</strong></p>
  
  <p>Compare it to:</p>
  
  <pre><code>String x = "one";
  Supplier&lt;String&gt; s = () -&gt; x.toUpperCase();
  System.out.println("s.get() = " + s.get());
  x = "two";
  System.out.println("s.get() = " + s.get());
  </code></pre>
  
  <p>It will throw a compilation error.</p>