Difference between declaring variables before or in loop? Difference between declaring variables before or in loop? java java

Difference between declaring variables before or in loop?


Which is better, a or b?

From a performance perspective, you'd have to measure it. (And in my opinion, if you can measure a difference, the compiler isn't very good).

From a maintenance perspective, b is better. Declare and initialize variables in the same place, in the narrowest scope possible. Don't leave a gaping hole between the declaration and the initialization, and don't pollute namespaces you don't need to.


Well I ran your A and B examples 20 times each, looping 100 million times.(JVM - 1.5.0)

A: average execution time: .074 sec

B: average execution time : .067 sec

To my surprise B was slightly faster.As fast as computers are now its hard to say if you could accurately measure this.I would code it the A way as well but I would say it doesn't really matter.


It depends on the language and the exact use. For instance, in C# 1 it made no difference. In C# 2, if the local variable is captured by an anonymous method (or lambda expression in C# 3) it can make a very signficant difference.

Example:

using System;using System.Collections.Generic;class Test{    static void Main()    {        List<Action> actions = new List<Action>();        int outer;        for (int i=0; i < 10; i++)        {            outer = i;            int inner = i;            actions.Add(() => Console.WriteLine("Inner={0}, Outer={1}", inner, outer));        }        foreach (Action action in actions)        {            action();        }    }}

Output:

Inner=0, Outer=9Inner=1, Outer=9Inner=2, Outer=9Inner=3, Outer=9Inner=4, Outer=9Inner=5, Outer=9Inner=6, Outer=9Inner=7, Outer=9Inner=8, Outer=9Inner=9, Outer=9

The difference is that all of the actions capture the same outer variable, but each has its own separate inner variable.