Your "experienced programmer" is right.
The garbage collector does not come into this in the way you imagine. You're talking about a local variable that is an object
reference, not an object. The same objects will be created and destroyed in both cases. The difference between the cases is that a local variable will be created once per loop, if it's declared inside the loop, or just once, if it's declared outside the loop.
Local variable creation is
very fast. In literally 99.999% of cases, no measurable or perceptible performance difference will occur.
A much more important consideration is readability of code. And, for best readability of code,
you should declare variables as close as possible to where they are used. In this case, that's inside the loop, not outside.
Another consideration is that, if you put the declaration outside the loop, and do not null-out the variable's value after the loop, you could risk preventing garbage collection of whatever object the variable refers to. In really bad cases, a large amount of data could be needlessly retained. In most cases, this won't happen, but it's a bigger concern than local variable creation, and is another reason to put the declaration inside the loop.