Java automatically caches integral wrapper objects that are within the byte range [-128,127]. This works for Byte, Short, Character, Integer, and Long, as well as Boolean.
As far as the specification, the JVM is not required to cache Long objects. The specification states that a particular range for particular wrappers must be cached. It doesn't state what should happen to values outside the range, or for other objects... So the JVM is free to cache, or not-cache the values. This is the case with Long objects. The Sun JVM caches them, even though it is not required to.
Henry