If no character in this string has a different uppercase version,
based on calling the toUpperCase method defined by
Character, then the original string is returned.
Otherwise, a new string is allocated, whose length is identical
to this string, and such that each character that has a different
uppercase version is mapped to this uppercase equivalent.