It has nothing to do with +=. It is to do with how + works.
If either of the operands of + is of String type, + is the string concatenation operator; otherwise, it is numeric addition.
temp += (char) 90 + 10;
is the same as
temp += ((char) 90 + 10);
So the bracket is evaluated first, and then the += is applied. Here, neither (char) 90 nor 10 are Strings, so + is numeric addition.
In order to do numeric addition, the two operands must be made compatible - this is called binary numeric promotion. If the operands are a char and an int, the char is widened to an int.
Hence (char) 90 is immediately widened back to 90; then the two ints can be added - yielding 100 - and then that can be appended to the temp String via +=.
On the other hand
temp += "" + (char) 90 + 10;
is the same as
temp += (("" + (char) 90) + 10);
So, it evaluates the inner-most brackets first.
Because "" is a String, "" + (char) 90 is string concatenation, resulting in the value "Z". That's a String too; so "Z" + 10 is also string concatenation, resulting in "Z10".