Because the boxing version does not need to convert i to a standalone string as an intermediate step. Rather it directly constructs the result string using the boxed i, which has less total overhead because it saves some memory allocation.
i