Comparison operations are supported by all objects. They all have the
same priority (which is higher than that of the Boolean operations).
Comparisons can be chained arbitrarily; for example, x <
y <= z
is equivalent to x < y and
y <= z
, except that y is evaluated only once (but
in both cases z is not evaluated at all when x <
y
is found to be false).
This table summarizes the comparison operations:
Operation | Meaning | Notes |
---|---|---|
< |
strictly less than | |
<= |
less than or equal | |
> |
strictly greater than | |
>= |
greater than or equal | |
== |
equal | |
<> |
not equal | (1) |
!= |
not equal | (1) |
is |
object identity | |
is not |
negated object identity |
Notes:
<>
and !=
are alternate spellings for the same operator.
(I couldn't choose between ABC and C! :-)
!=
is the preferred spelling; <>
is obsolescent.
Objects of different types, except different numeric types, never
compare equal; such objects are ordered consistently but arbitrarily
(so that sorting a heterogeneous array yields a consistent result).
Furthermore, some types (for example, file objects) support only a
degenerate notion of comparison where any two objects of that type are
unequal. Again, such objects are ordered arbitrarily but
consistently.
Instances of a class normally compare as non-equal unless the class
Implementation note: Objects of different types except numbers are ordered by their type names; objects of the same types that don't support proper comparison are ordered by their address.
Two more operations with the same syntactic priority,
"in"