What is the difference between identity and equality in OOP?
Identity determines whether two objects share the same memory address. Equality determines if two object contain the same state.
If two object are identical then they are also equal but just because two objects are equal dies not mean that they share the same memory address.
There is a special case for Strings but that is off topic and you'll need to ask someone else about how that works exactly ;-)
identity: a variable holds the same instance as another variable.
equality: two distinct objects can be used interchangeably. they often have the same id.
Identity
For example:
Integer a = new Integer(1);
Integer b = a;
a
is identical to b
.
In Java, identity is tested with ==
. For example, if( a == b )
.
Equality
Integer c = new Integer(1);
Integer d = new Integer(1);
c
is equal but not identical to d
.
Of course, two identical variables are always equal.
In Java, equality is defined by the equals
method. Keep in mind, if you implement equals you must also implement hashCode.