First of all String.toString
is a no-op:
/**
* This object (which is already a string!) is itself returned.
*
* @return the string itself.
*/
public String toString() {
return this;
}
Second of all, String constants are interned so s1 and s2 are behind the scenes changed to be the same String instance.