Postfix (i++) vs Prefix (++i) increment in Java


Reading time: 15 minutes | Coding time: 2 minutes

i++ is known as postfix increment operation while ++i is known as prefix increment operation. We compare these two operations based on:

  • Use/ Program flow
  • Compiler instruction
  • Benchmark

We demonstrate that ++i is significantly faster than i++ in Java and should be kept into consideration.

Use/ Program flow

Consider the operation ++i:

  • Step 1: Value of i is incremented by 1
  • Step 2: Value of i is returned / used in the expression or statement

Consider the operation i++:

  • Step 1: Value of i is returned / used in the expression or statement
  • Step 2: Value of i is incremented by 1

Hence, in ++i, directly the value of i is changed while in i++, the value of i is copied into a temporary variable which is used in the expression and the value of i is incremented.

Note: i++ has an extra operation of copying an element i into another variable.

Demonstration using Java code:

class benchmark_opengenus 
{
	public static void main (String[] args) 
	{
	    int i = 1;
	    System.out.println(++i);
	    
	    i = 1;
	    System.out.println(i++);
     }
}

Output:

2
1

Compiler Instruction

Both i++ and ++i use iinc instruction

The exact command depends on the type of compiler being used.

Benchmark

To measure the performance of the two similar statements, we used the following Java code:

class benchmark_opengenus 
{
	public static void main (String[] args) 
	{
	    int i=0, limit = 1000000;
	    long t1_1 = System.nanoTime();
		for(int j=0; j<=limit; j++)
		{
		    i++;
		}
		long t1_2 = System.nanoTime();
		
		long t2_1 = System.nanoTime();
		for(int j=0; j<=limit; j++)
		{
		    ++i;
		}
		long t2_2 = System.nanoTime();
		
		System.out.println("i++ took "+(t1_2-t1_1)+ " nanoseconds");
		System.out.println("++i took "+(t2_2-t2_1)+ " nanoseconds");
		
		System.out.println("++i took "+ String.format("%.2f",(double)(t2_2-t2_1)*100/(t1_2-t1_1))+" % of time taken by i++");
	}
}

Output:

i++ took 7113590 nanoseconds
++i took 3814360 nanoseconds
++i took 53.62 % of time taken by i++

Hence, we see ++i is nearly 50% faster than i++.

Always use ++i instead of i++ when ever possible