Referential equality and structural equality
When working with a language that supports object-oriented programming, there are two concepts of equality. The first is when two separate references point to the exact same instance in memory. The second is when two objects are separate instances in memory but have the same value. What same value means is specified by the developer of the class. For example, for two square instances to be the same we might just require they have the same length and width regardless of co-ordinate.
The former is called referential equality. To test whether two references point to the same instance, we use the ===
operator (triple equals) or !==
for negation:
val a = File("/mobydick.doc") val b = File("/mobydick.doc") val sameRef = a === b
The value of the test a === b
is false because, although a
and b
reference the same file on disk, they are two distinct instances of the File
object.
The latter is called structural equality. To test...