Wai Iu,
In both cases ,<pre>
i+=c;
c+=i;</pre>
the ASCII value of the Right Hand operand is added to the left hand operand. Which means
i= (int)(i+c); is SAME as i=(int) 1+50; which is SAME as i=51; Simillarly for your 2nd case
c+=i is SAME AS c = (char)(c+i); SAME AS c=(char)(50+1); same as c=(char)(51) same as c= 51; The key here is how you represent the numeral value 51 ? When you print it as integer by assigning to a var of type 'int' which here is var 'i' and pass it to the perfect matching method among all other overloaded methods of println method, the 'integer' value which is '51' is printed.
At the same time when you represent the numeral as 'character' by assigning it to a char var and call the appropriate println(..) the char representation of that int val which here is '2' (the face value as you said

) is printed. Is this clear to you now? OR if still not convincing please reply back.
regds
maha anna
[This message has been edited by maha anna (edited April 15, 2000).]