For loop
A loop is nothing more than a repetitive control structure that can execute instructions multiple times, in java there are various loops like:
do/while
do {
//Execution block
} while (condition);
while:
while (condition) {
//Execution block
}
for:
for (int i = 0; i < args.length; i++) {
//Execution block
}
enhanced for (for each):
for (String string : args) {
//Execution block
}
In this post we are going to focus on the regular for and the enhanced for (for each), we are going to see how both loops works and what are their differences.
The regular for loop in java is primary used to executed repetitive code, for example iterate through an array, print multiple messages, etc.
As we can see in the declaration of the for loop, this is composed of:
- key statement: for
- block of variable initialization: int i = 0
- block of conditional checking: i < 10
- block where the variables are incremented: i++
- and the execution block: //any code to be executed
Most people can think that the step in which the regular for loop is executed is as showing in its declaration, but not, the steps that the JVM follow to execute a regular for loop are as follow:
- first the block of variable initialization is executed, in this block you initialize the variables that are going to be used in the for loop, you can have multiple var initialization, or even don't have any var initialization at all, as follow:
for (int i = j = 0; i < 10; i++) {
//Execution block
}
in this example, if you are declaring an initializing more than one variable, these variables have to be of the same type and you have to set its value at the same time.
you can have the var declaration outside de for loop, as follow:
int i;
int j;
double d;
for (i = 0, j = 0, d = 1.0; i < 10; i++) {
//Execution block
}
in this case you can have multiple variables of multiple types and you can initialize those variables using a comma separator.
2. once all the variables are initialized, the next step is executing the block of conditional checking, this is the part where the program check if the for loop a meets the criteria to continue running.
- after the conditional checking is executed, the next step is executing the code block inside the for loop
- the final step is check block where the variables are incremented
these steps are repeated over and over again, going to the step 2 to check the conditional checking, then to the step 3 execution block inside the for loop and then the block where the variables are incremented, and so on until the for loop meets the criteria to continue running.
It is worth to mention that the block where the variables are incremented have to be a statement that return a value, in this case i++ return the value of i and then increment its value, of example if you have a for as follow: when you attempt to add 2 to the variable i the code will not compile:
for (int i = 0; i < 10; i + 2) {
//Execution block
}
The enhanced for loop (for each) is not much different of the regular loop, it is just a way to use a for loop without worrying about the conditional checking and the incremental checking.
The enhanced for loop only works on collections that implements the iterator interface, this loop is just a help for the developer, once you compile your program, the compiler translates the for loop to a regular while loop if you are using a collection or to a regular for loop if you are using an array, let see an example:
List<Integer> list = new ArrayList<>(List.of(1,2,3,4));
for (Integer var:list) {
System.out.println(var);
}
is compiled and translated to:
List<Integer> list = new ArrayList(List.of(1, 2, 3, 4));
Iterator var2 = list.iterator();
while(var2.hasNext()) {
Integer var = (Integer)var2.next();
System.out.println(var);
}
String[] string = {"1","2","3", "4"};
for (String str: string) {
System.out.println(str);
}
is compiled and translated to:
String[] string = new String[]{"1", "2", "3", "4"};
String[] var8 = string;
int var4 = string.length;
for(int var5 = 0; var5 < var4; ++var5) {
String str = var8[var5];
System.out.println(str);
}
As you can see the enhanced for loop is translated to a regular loop when you compiled your code which indicate that the compiler will handle all the complexity of manage the conditional checking and incremental variable for us, which result in cleaner and easy to read code.
I hope this post will help you understand how for loops works in Java, this can be an easy topic at first glance but having a good understanding of this topics will help you to face interviews or solving certification exams.
Recommended readings: