The '+=' operator creates a new String object where the .concat(String) and .toUpperCase() methods do not.
The '+=' operator and the '.concat()' works the same way. A new string is created as a result of both the operations. For this example, In case of s+="here", a new string is created after combining the 2 strings s & "here" and then this string is assigned to s.
For s.concat(s1), a new string is created after combining the contents of the 2 strings s & s1 but since it is not addigned to any object, this new string is lost.
If the statement had been s = s.concat(s1); then string s would hold contents of the new string created as a result of the .concat()
Hope this clarifies things.