Yes, that's it, but why?
Why first method isnt' more specific than the second?
Why arguments (1,2,3) cannot be converted to int array conataining those numbers?
A method M is more specific than method N if the every valid argument-list for M is a valid argument list for N buit not vice-versa.
In the current case, we see that every valid argument list for
void bar(int... x)
is valid for
void bar(Integer... x)
And vice versa.
Thus, compiler has no reason to "prefer" one over other, since neither of them is "more specific" than other. Hence it refuses to compile the code.