Is there a difference between x++ and ++x in java?
Asked Answered
B

18

140

Is there a difference between ++x and x++ in java?

Beitnes answered 7/7, 2009 at 21:7 Comment(0)
E
338

++x is called preincrement while x++ is called postincrement.

int x = 5, y = 5;

System.out.println(++x); // outputs 6
System.out.println(x); // outputs 6

System.out.println(y++); // outputs 5
System.out.println(y); // outputs 6
Erythromycin answered 7/7, 2009 at 21:9 Comment(0)
L
76

yes

++x increments the value of x and then returns x
x++ returns the value of x and then increments

example:

x=0;
a=++x;
b=x++;

after the code is run both a and b will be 1 but x will be 2.

Longevity answered 7/7, 2009 at 21:10 Comment(0)
P
21

These are known as postfix and prefix operators. Both will add 1 to the variable but there is a difference in the result of the statement.

int x = 0;
int y = 0;
y = ++x;            // result: x=1, y=1

int x = 0;
int y = 0;
y = x++;            // result: x=1, y=0
Prospect answered 7/7, 2009 at 21:13 Comment(1)
Shouldn't it be suffix?Painterly
H
12

In Java there is a difference between x++ and ++x

++x is a prefix form: It increments the variables expression then uses the new value in the expression.

For example if used in code:

int x = 3;

int y = ++x;
//Using ++x in the above is a two step operation.
//The first operation is to increment x, so x = 1 + 3 = 4
//The second operation is y = x so y = 4

System.out.println(y); //It will print out '4'
System.out.println(x); //It will print out '4'

x++ is a postfix form: The variables value is first used in the expression and then it is incremented after the operation.

For example if used in code:

int x = 3;

int y = x++;
//Using x++ in the above is a two step operation.
//The first operation is y = x so y = 3
//The second operation is to increment x, so x = 1 + 3 = 4

System.out.println(y); //It will print out '3'
System.out.println(x); //It will print out '4' 

Hope this is clear. Running and playing with the above code should help your understanding.

Hilaire answered 2/10, 2017 at 23:43 Comment(0)
E
11

Yes,

int x=5;
System.out.println(++x);

will print 6 and

int x=5;
System.out.println(x++);

will print 5.

Experiment answered 7/7, 2009 at 21:10 Comment(1)
This "answer" just tells you a test case output, and I consider that outputs are not answers. On the contrary, normally the (unexpected) result of some code execution leads as to the question. Hence my down vote.Zymolysis
H
9

I landed here from one of its recent dup's, and though this question is more than answered, I couldn't help decompiling the code and adding "yet another answer" :-)

To be accurate (and probably, a bit pedantic),

int y = 2;
y = y++;

is compiled into:

int y = 2;
int tmp = y;
y = y+1;
y = tmp;

If you javac this Y.java class:

public class Y {
    public static void main(String []args) {
        int y = 2;
        y = y++;
    }
}

and javap -c Y, you get the following jvm code (I have allowed me to comment the main method with the help of the Java Virtual Machine Specification):

public class Y extends java.lang.Object{
public Y();
  Code:
   0:   aload_0
   1:   invokespecial  #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_2 // Push int constant `2` onto the operand stack. 

   1:   istore_1 // Pop the value on top of the operand stack (`2`) and set the
                 // value of the local variable at index `1` (`y`) to this value.

   2:   iload_1  // Push the value (`2`) of the local variable at index `1` (`y`)
                 // onto the operand stack

   3:   iinc  1, 1 // Sign-extend the constant value `1` to an int, and increment
                   // by this amount the local variable at index `1` (`y`)

   6:   istore_1 // Pop the value on top of the operand stack (`2`) and set the
                 // value of the local variable at index `1` (`y`) to this value.
   7:   return

}

Thus, we finally have:

0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp
Hostetter answered 24/8, 2012 at 14:25 Comment(0)
D
9

When considering what the computer actually does...

++x: load x from memory, increment, use, store back to memory.

x++: load x from memory, use, increment, store back to memory.

Consider: a = 0 x = f(a++) y = f(++a)

where function f(p) returns p + 1

x will be 1 (or 2)

y will be 2 (or 1)

And therein lies the problem. Did the author of the compiler pass the parameter after retrieval, after use, or after storage.

Generally, just use x = x + 1. It's way simpler.

Drainpipe answered 4/6, 2016 at 2:23 Comment(0)
B
4

Yes.

public class IncrementTest extends TestCase {

    public void testPreIncrement() throws Exception {
        int i = 0;
        int j = i++;
        assertEquals(0, j);
        assertEquals(1, i);
    }

    public void testPostIncrement() throws Exception {
        int i = 0;
        int j = ++i;
        assertEquals(1, j);
        assertEquals(1, i);
    }
}
Bluebird answered 7/7, 2009 at 21:12 Comment(0)
P
3

Yes, using ++X, X+1 will be used in the expression. Using X++, X will be used in the expression and X will only be increased after the expression has been evaluated.

So if X = 9, using ++X, the value 10 will be used, else, the value 9.

Privett answered 7/7, 2009 at 21:11 Comment(0)
G
3

If it's like many other languages you may want to have a simple try:

i = 0;
if (0 == i++) // if true, increment happened after equality check
if (2 == ++i) // if true, increment happened before equality check

If the above doesn't happen like that, they may be equivalent

Grume answered 7/7, 2009 at 21:11 Comment(0)
C
3

Yes, the value returned is the value after and before the incrementation, respectively.

class Foo {
    public static void main(String args[]) {
        int x = 1;
        int a = x++;
        System.out.println("a is now " + a);
        x = 1;
        a = ++x;
        System.out.println("a is now " + a);
    }
}

$ java Foo
a is now 1
a is now 2
Chivalric answered 7/7, 2009 at 21:12 Comment(0)
S
2

OK, I landed here because I recently came across the same issue when checking the classic stack implementation. Just a reminder that this is used in the array based implementation of Stack, which is a bit faster than the linked-list one.

Code below, check the push and pop func.

public class FixedCapacityStackOfStrings
{
  private String[] s;
  private int N=0;

  public FixedCapacityStackOfStrings(int capacity)
  { s = new String[capacity];}

  public boolean isEmpty()
  { return N == 0;}

  public void push(String item)
  { s[N++] = item; }

  public String pop()
  { 
    String item = s[--N];
    s[N] = null;
    return item;
  }
}
Stanstance answered 17/2, 2014 at 13:23 Comment(0)
W
2

Yes, there is a difference, incase of x++(postincrement), value of x will be used in the expression and x will be incremented by 1 after the expression has been evaluated, on the other hand ++x(preincrement), x+1 will be used in the expression. Take an example:

public static void main(String args[])
{
    int i , j , k = 0;
    j = k++; // Value of j is 0
    i = ++j; // Value of i becomes 1
    k = i++; // Value of k is 1
    System.out.println(k);  
}
Werewolf answered 18/6, 2014 at 13:4 Comment(0)
H
2

The Question is already answered, but allow me to add from my side too.

First of all ++ means increment by one and -- means decrement by one.

Now x++ means Increment x after this line and ++x means Increment x before this line.

Check this Example

class Example {
public static void main (String args[]) {
      int x=17,a,b;
      a=x++;
      b=++x;
      System.out.println(“x=” + x +“a=” +a);
      System.out.println(“x=” + x + “b=” +b);
      a = x--;
      b = --x;
      System.out.println(“x=” + x + “a=” +a);
      System.out.println(“x=” + x + “b=” +b);
      }
}

It will give the following output:

x=19 a=17
x=19 b=19
x=18 a=19
x=17 b=17
Herminahermine answered 21/4, 2015 at 12:7 Comment(1)
This response would be even better if accompanied by a few words of explanation.Blotter
A
1
public static void main(String[] args) {    

int a = 1;    
int b = a++; // this means b = whatever value a has but, I want to    
increment a by 1    
    
System.out.println("a is --> " + a);    //2    
System.out.println("b is --> " + b);    //1     
a = 1;    
b = ++a;  // this means b = a+1    
    
System.out.println("now a is still  --> " + a);    //2    
System.out.println("but b is --> " + b);           //2    

}    
Attenuant answered 7/2, 2022 at 0:21 Comment(0)
C
0

With i++, it's called postincrement, and the value is used in whatever context then incremented; ++i is preincrement increments the value first and then uses it in context.

If you're not using it in any context, it doesn't matter what you use, but postincrement is used by convention.

Coherence answered 18/5, 2015 at 17:21 Comment(0)
N
0

There is a huge difference.

As most of the answers have already pointed out the theory, I would like to point out an easy example:

int x = 1;
//would print 1 as first statement will x = x and then x will increase
int x = x++;
System.out.println(x);

Now let's see ++x:

int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);
Natural answered 3/7, 2017 at 1:46 Comment(0)
S
0

Try to look at it this way: from left to right do what you encounter first. If you see the x first, then that value is going to be used in evaluating the currently processing expression, if you see the increment (++) first, then add one to the current value of the variable and continue with the evaluation of the expression. Simple

Smacking answered 23/7, 2022 at 11:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.