This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
There I have read that to Byte toString() behaves exactly like the static method of the Byte toString() which creates a new String object with represents the value of the Byte. So there a 2 new String objects created.
To add to what Remko and Raghavan said, if you use the == operator on objects, you are not comparing the contents of the objects; you are only checking if the two expressions on both sides of the == refer to the exact same object.
If you have two different String objects, == will return false (no matter what those String objects contain).