If you read the String API you will see that toString is documented as:
This object (which is already a string!) is itself returned.
So "String".toString() is the same object as "String". Remember that strings like "String" are stored in a string literal pool. Because we are comparing identical string literals the result of the "==" operator is true.
Byte.toString() returns a new String object every time it is called. And the objects returned are not the original string literal "127". So the "==" comparison fails.