You don't manipulate the reference directly (i.e. you shouldn't learn its numeric value (though you can - useful for debugging), and you can't change it) - but you do use it indirectly all the times with ==, eq, or however the referential equality operator is called in a given programming language.
This is what, given (excuse the Java):
MyObject a = new String("choo choo");
MyObject b = a;
MyObject c = new String("choo choo");
allows you to observe that:
a == b;
a != c;
b != c;
even though:
a.equals(b);
a.equals(c);
b.equals(c);
under string comparison.
This is exactly like surrogate keys. An implementation detail that's crucial to the meaning of the whole thing.
This is what, given (excuse the Java):
allows you to observe that: even though: under string comparison.This is exactly like surrogate keys. An implementation detail that's crucial to the meaning of the whole thing.