Although they for sure represent the same value, they are different objects. Each time you call toString, a new String object is created. The Byte class has its toString method overriden to convert its byte value to a String. As String objects are immutable, each time you call toString, a new String has to be created and this is why you get the "False"
Wow, that is bizarre. I never knew that. Apparently any call to Integer.toString(int) with a value between -3 and 10 inclusive will return true because it uses the same string constant. Did they somehow determine that these values were so common that having them all point to the same string representation in memory was more efficient?
Looking further at the JDK, it must have something to do with this "invariant divison by multiplication" algorithm they use to make the toString conversion quicker. But the algorithm is a little obscure for my small brain. [ August 24, 2005: Message edited by: Ryan Kade ]