<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="color:rgb(0,0,0);font-family:georgia,serif;font-size:12.8px">My question is, apple equals banana, but their hashValues (in their own types)  don&#39;t. What&#39;s wrong here? </span></blockquote>​<div>Hi Zhao.  In addition to what Jordan and Dmitri have said, I think part of the confusion is that you are assuming hash values are implicitly used in an equality check.  They are not.  They are used when your instances are added to certain types of collections. </div><div><br></div><div>In your first example, where you print out the hash values but then compare <a href="http://lhs.name">lhs.name</a> to <a href="http://rhs.name">rhs.name</a>, the names of the two fruits are both &quot;common fruit&quot;, and the equality test returns true.  Hash never comes into play.  You can test for yourself when the hash gets used:</div><div><br></div><div>







<p class="gmail-p1">import Foundation<br>
class Foo: NSObject { <br>
<span class="gmail-s1">    </span>override var hash: Int { <br>
<span class="gmail-s1">        </span>print(&quot;Computing hash value!&quot;) <br>
        return 1 <br>
<span class="gmail-s1">    </span>} <br>
} <br>
var f1 = Foo()<br>
var f2 = Foo()<br>
f1 == f2  // Doesn&#39;t print anything!<br>
var aSet = Set&lt;Foo&gt;()<br>
aSet.insert(f1)  // Prints &quot;Computing has value!&quot;</p></div><div><br></div><div>Lou</div></div>