There are two distinct notions of “sameness” when it comes to objects.

You can test if two references point to the same object ( identity comparison ). This is rarely used; it is mostly useful with large, mutable objects where the object identity matters but the value is transient:
eq? ( obj1 obj2 -- ? )


You can test if two objects are equal in a domain-specific sense, usually by being instances of the same class, and having equal slot values ( value comparison ):
= ( obj1 obj2 -- ? )


A third form of equality is provided by number=. It compares numeric value while disregarding types.

Custom value comparison methods for use with = can be defined on a generic word:
equal? ( obj1 obj2 -- ? )


Utility class:
identity-tuple


An object can be cloned; the clone has distinct identity but equal value:
clone ( obj -- cloned )