Avoiding any cast is a plus. Object type casts are basically a VM version of runnning 'instanceof' on the object. Primitive data type casts are data conversions. Because the primitive type cast consists of the VM mapping a bunch of bits of one size & format to a bunch of bits of another size & format, it is a pretty fast data conversion. But nevertheless, if you can manipulate code to avoid a cast completely, then that is one less operation the code needs to execute. HotSpot tries to eliminate casts wherever it can, even in some cases by speculatively assuming a data type and not bothering with the cast. If the assumption turns out to be wrong, then HotSpot actually has to deoptimize the code to get back to the slower, safer version.