Hi cchetan,
When I do "if(c == b)", the == is doing a comparison of the references of these vars. The Byte.equals() method returns true if the equals parameter is a "instanceof" Byte. That's how it was implemented.
The autoboxing is related the Wrapper classes of primitive types. Each primitive type in
Java (int, byte, long, float, etc) has a corresponding (wrapper) class (Integer, Byte, Long, Float, etc) to be used when an object is expected instead of a primitive value/type.
Before Java 5.0, the process to handle the interaction of primitive types and its wrappers was "manual"... Autoboxing came to make things easier.
You should read more about Wrapper classes and Autoboxing to understand better that process. Not too complex. But some aspects are implementation details you need to know.
Not easy to summarize all this in one post, but read more about Wrapper classes and Autoboxing and tell us your questions. I'm still studying that too.
Hiram