On the java tutorial page on assignment operators, http://java.sun.com/docs/books/tutorial/java/nutsandbolts/assignment.html, the following is mentioned:

"Suppose you wanted to add a number to a variable and assign the result back into the variable, like this:
i = i + 2;
You can shorten this statement using the shortcut operator +=, like this:
i += 2;
The two previous lines of code are equivalent. "

But if this is the case then why the following code gives the compile time error

byte b = 0;
b = b + 100;

Test.java:14: possible loss of precision
found : int
required: byte
b = b + 100;
^
1 error
where as the following compiles without any error

this is valid for numberics (int, double, float, etc.). For byte you need to cast for compile but adding bytes is usually senseless as you usually add nummbers (or strings) and then you should use the corresponding types.

This behavior is well defined in the JLS (Java Language Specification). The pertinent JLS section (15.25.2Compound Assignment Operators) can be found at http://java.sun.com/docs/books/jls/first_edition/html/15.doc.html#5304