The book (Java in 2 semesters, which I need for my course) is saying that there should be no need to use anything below int(Byte) and anything below Double(Float).
(assuming you meant to use all lower case, and are talking about the primitives only: )
It's probably referring to the fact that the bytecode encodes both versions using the same number of bits; so a java byte, char, and short ALL take the same amount of memory as an int. long and double use twice as much as int and float. Everything else uses the same as int (including boolean, IIRC?)
Cas, what situations are there (other than JIT/Hotspot, JNI comms, and IO, perhaps?) where there's a difference under-the-cover?
NB java bytecode does *preserve* the difference (different bytecodes for whether the 32-bit number is an int or a short), so Hotspot/JIT/etc could take advantage of this when compiling to native code. I'm not defending the book's statement, just trying to explain it. It may have been true if the book were written long enough ago to predate advanced VM's, but was always a dumb thing to put in a *book*, which tends to hand around a long time!