I'm working through the problems on Codingbat.com and bumped into the fact that for the += operator, a += b isn't necessarily exactly equal to a = a + b. This is well known and has been discussed on SO before, but I bumped into something strange happening when using the charAt() method combined with the above syntax that I can't make sense of.
Say I have two variables:
String str = "The";
String result = "";
I want to add the first letter in "str" two times to "result". One way of doing this is to:
result = result + str.charAt(0) + str.charAt(0);
which results in result = "TT".
However, if I use the += operator, e.g.:
result += str.charAt(0) + str.charAt(0);
I get result = "168". Clearly character addition has taken place (ASCII code for 'T' is 84, 84*2 = 168).
I'm wondering what is actually going on in the first case using the += operator. According to the docs on assignment operators: E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)). So I would expect the latter expression to output "168" just like using the += operator did. But the following outputs "TT" correctly, and not "168":
result = (String)(result + str.charAt(0) + str.charAt(0));
Have I just misunderstood the documentation? I also found an answer on SO that suggests that str1 += str2 is equivalent to:
str1 = new StringBuilder().append(str1).append(str2).toString();
But evaluating the following:
result = new StringBuilder().append(str.charAt(0)).append(str.charAt(0)).toString();
Still results in "TT", not "168".
Sorry for the long post! I'm just curious at what actually is happening when using charAt() in combination with a String and +=, because the two "equivalents" I've found (if I've translated them from two to three terms correctly) does not produce the same result.