Because they are the same object. Instances of small NSNumbers are cached by their implementation, and now Objective-C actually uses tagging for NSNumbers within a certain range.
Similarly, [@"someString" copy]
will simply return @"someString"
. As long as the semantics are preserved correctly, the framework is free to do all sorts of things like this under the hood.