×

Search anything:

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

Internship at OpenGenus

Get this book -> Problems on Array: For Interviews and Competitive Programming

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

OpenGenus Tech Review Team

OpenGenus Tech Review Team

The official account of OpenGenus's Technical Review Team. This team review all technical articles and incorporates peer feedback. The team consist of experts in the leading domains of Computing.

Read More

Improved & Reviewed by:


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