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

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


Solution 1:

++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

Solution 2:

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.

Solution 3:

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: y=1, x=1

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

Solution 4:

Yes,

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

will print 6 and

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

will print 5.

Solution 5:

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