# Operator assignment freaks me out?

Karthik Gurunathan
Greenhorn
Posts: 19
What will the following class print ?
class InitTest
{
public static void main(String[] args)
{
int a = 1;
int b = 1;
a = a++;
b = b++ + b;
System.out.println(a+ " "+b);
}
}

How come the answer is 1,3 for the above code? I am not able to get my head around this stuff...please somebody explain. I thought it 2,3.

Nathaniel Stoddard
Ranch Hand
Posts: 1258
Karthik,
To compute a, the compiler first sees what a is (1), then does the post-increment (now a = 1), then finally set a to what it saw the first time (which was 1). So, a will be 1 once the "=" is done.
To compute b, you must remember that operands are computed left to right. So, the first operand will be 1, then b is incremented so be = 2. Then the second operand is retrieve (which is b, now 2). Then the "+" is done, using 2 and 1. So, be = 3.
Does that make sense?

Davy Kelly
Ranch Hand
Posts: 384
hey Karthik,
this is a great thread to read on the post increment operator.
post increment operator
but in quick terms.
int a = 1;
int b = 1;
a = a++; //a=a; then add 1 to a, so a=1; the last post increment did happen but did not get assigned to anything
b = b++ + b; //b=b++ + b; b=1 + 2 b=3 same here because it increments after it has done the last thing.
System.out.println(a+ " "+b);
Davy
[ April 19, 2004: Message edited by: Davy Kelly ]

Lionel Orellana
Ranch Hand
Posts: 87
Just remember x++ adds one to x but it actually returns x. ++x adds one to x and returns x + 1.

Bert Bates
author
Sheriff
Posts: 8905
5
Three guesses what my comment is?