The difference isn't in performance, but in capability. When using a reference directly you have more power over explicitly using a type of iterator (e.g. List.iterator() vs. List.listIterator(), although in most cases they return the same implementation). You also have the ability to reference the Iterator in your loop. This allows you to do things like remove items from your collection without getting a ConcurrentModificationException.
e.g.
This is ok:
Set
This is not, as it will throw a concurrent modification exception:
Set set = new HashSet();
// add some items to the set
for(Object o : set){
if(o meets some condition){
set.remove(o);
}
}