Differences between '==' and 'is' beyond null and overloading

Nicholas Smith nmsmith65 at gmail.com
Tue Apr 16 04:02:26 PDT 2013


Hello there,

I was wondering what the differences are functionally and 
semantically between '==' and 'is' beyond the two points here and 
my interpretation below. Functionally:
- You must use 'is' to check for a null reference.
- 'is' cannot be overloaded, and it assesses reference types 
based on reference equality and value types based on value 
equality.

Semantically, I've seen that 'is' means identity, as in, "this 
object is physically the same object as another", or "this struct 
is physically the same struct" (which would have an identical 
meaning to == as structs are value types and can't be compared 
any other way).

Equality is then, I believe, meant to mean "this object has the 
same 'value' as this other object", or "this struct has the same 
'value' as this other struct".

But, by default, equality tests if object references are equal, 
perhaps because if a true 'equality' exists then it needs to be 
defined by the programmer via an overload (even through structs 
have an equality test)? Am I on the right track with all of this?


More information about the Digitalmars-d-learn mailing list