why b1.toString() == b2.toString() is evaluating to false.
When a Java expression creates a new String at run time, a new object is created. The = operator checks whether these are the same object. The equals() method would compare the characters in these objects and yield true.
"127" == "127" would be true because the String object "127" is created once at compile time in the String Literal Pool, so you are comparing an object to itself. When you use toString() to create a String, you get a unique object every time.