I want to ask which piece of code is more efficient in Java?
Code 1:
void f()
{
for(int i = 0 ; i < 99999;i++)
{
for(int j = 0 ; j < 99999;j++)
{
//Some operations
}
}
}
Code 2:
void f()
{
int i,j;
for(i = 0 ; i < 99999;i++)
{
for(j = 0 ; j < 99999;j++)
{
//Some operations
}
}
}
My teacher said that second is better, but I can’t agree that opinion.
I would prefer the first over the second because it keeps the loop variables out of the way of the rest of the code in the method. Since they’re not visible outside of the loop, you can’t accidentally refer to them later on.
The other answers are right, too: don’t worry about this sort of thing for performance. But do think about it for code readability reasons, and for communicating programmer intent to the next person who comes along. This is much more important than micro-optimization concerns.
Now, that’s at the Java language (as in Java Language Specification) level. At the Java Virtual Machine level, it makes absolutely no difference which of those two you use. The locals are allocated in exactly the same way.
If you’re not sure, you can always compile it and see what happens. Let’s make two classes, f1 and f2, for the two versions:
Compile them:
And decompile them:
And compare them:
There’s absolutely no difference in the bytecode.