Dart has both:
- an equality operator
==
and - a top-level function named
identical()
.
By the choice of syntax, it feels natural to want to use Dart's ==
operator more frequently than identical()
, and I like that. In fact, the Section on Equality of the Idiomatic Dart states that "in practice, you will rarely need to use" identical()
.
In a recent answer to one of my questions concerning custom filters, it seems that Angular Dart favors use of identical()
rather than ==
when trying to determine whether changes to a model have reached a steady state. (Which can make sense, I suppose, for large models for reasons of efficiency.)
This got me to thinking about identity of int
's and so I wrote some tests of identical()
over int
s. While I expected that small int
s might be "interned/cached" (e.g. similar to what is done by Java's Integer.valueOf()
), to my surprise, I can't seem to generate two int
s that are equal but not identical. I get similar results for double
.
Are int
and double
values being interned/cached? Or maybe identical()
is treating them specially? Coming from a Java background, I used to equate equate Dart's:
==
to Java'sequal()
method andidentical()
to Java's equality test==
.
But that now seems wrong. Anyone know what is going on?