only integers between -128 and 127 are object interning so for 127 their wrappers point to the same object. 128 is out of this range, so two distinct objects are generated. If you compare the objects then they are different, but if you compare the values with equals() then they are equals.
"Objects other than strings can be interned. For example, in Java, when primitive values are boxed into a wrapper object, certain values (any boolean, any byte, any char from 0 to 127, and any short or int between −128 and 127) are interned, and any two boxing conversions of one of these values are guaranteed to result in the same object."
Avinesh I understand that's how it works, but I'm surprised and I am good with JS wich has a reputation of weird in how it handle some things, but it is not so when you know how that work... I just realized that it is not alone :D