According to the Java Language Specification §15.18.1
15.18.1 String Concatenation Operator +
If only one operand expression is of type String, then string
conversion (§5.1.11) is performed on the other operand to produce a
string at run time.
The result of string concatenation is a reference to a String object
that is the concatenation of the two operand strings. The characters
of the left-hand operand precede the characters of the right-hand
operand in the newly created string.
The String object is newly created (§12.5) unless the expression is a constant expression (§15.28).
+
will always produce a new string, unless the expression is constant. One example of a constant expression is "a" + "b"
. Your expression is not constant because it contains non-final variables.
This is stated even more clearly in §12.5:
Execution of a string concatenation operator + (§15.18.1) that is not
part of a constant expression (§15.28) always creates a new String
object to represent the result.