You should take a look at the concepts of casting, widening and boxing (Chapter 3 - Assignments of Kathy Sierra and Bert Bates SCJP 6 Study Guide)
A literal like 123 is understood by the compiler as a int, so autobox wrapps it in a Integer object when it is needed. Integer is not a (instanceof) of Long, so compilation fails. When you append l to the end of a literal you are telling the compiler that this is a long, so autobox wrapps it in a Long object and it compiles fine.
Long object has a constructor that accepts a primitive type long Long Java API Documentation. A int "fits" in the space of a long, so the compiler casts a int to a long "automagically" as you pass it to the constructor, and, as so, everything works without the 'l' at the end of the literal.
Short object has a constructor that accepts a primitive type short Short Java API Documentation. A int dosen't fit in the space of a short, so you need to explicitely cast the int with the risk of loosing precision (that is why the compiler don't do that automagically for you).