In version 1, I declare a list for each iteration, In version 2, I only declare one list and overwrite it for each iteration - but the overall result is the same. Following the rule "Declare variables as close as possible to where they are used." (http://www.javaranch.com/styleLong.jsp#init), I have to use version 1, but in this case I am not sure.
No, you're not declaring one list and overwriting it, you're assigning a different List, the one returned from getHobbies(), in both cases. The only difference is that in the second code, the last assigned List is still available after the loop exits.
There are no new questions, but there may be new answers.