When iterating over an array using an indexed loop, you typically need to access the element, as follows:

for(int i=0;i<100;i++) {
        String s = array[i];
        ...
}

Java performs bounds checking on the array[i] access to make sure i is within the limits of the array. Granted, there are optimizations the JVM can do in many cases using escape processing to know that i will always be in the range, but it is not always feasible.

when you use

for(String s : array) {
}

the JVM uses its own internal indexer that it knows cannot be outside the bounds, and thus the bounds checking can be avoided.

I would need to read the spec to know what happens if the array changes during the loop execution - my bet is that the loop maintains a reference to the original array, and thus it continues to work.

On Apr 11, 2008, at 2:28 AM, Endre Stølsvik wrote:

robert engels wrote:

The 'foreach' should be faster in the general case for arrays as the bounds checking can be avoided.

Why is that? Where do you mean that the bounds-checking can be avoided?

But, I doubt the speed difference is going to matter much either way, and eventually the JVM impl will converge to near equal performance.

This I actually agree on: if the foreach has some disadvantage of explicit indexing through an array, it will at some point be fixed so that it doesn't have this disadvantage anymore..

Endre.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to