The answer is Compile-time error. Anybody knows the real reason?
The ++ operator (and -- operator) provide an automatic cast back to the correct primitive type automatically for you. The (byte)a+b statement is really saying cast a to byte and then add b. Since all integer primitive classes (byte, short, char) are automatically converted to an int for the + operation, the result is an integer value trying to be assigned to a byte value without an explicit cast (narrowing conversion must occur). The (byte)a will be promoted to an int to be the same as the value b to perform the arithmetic operation. Thus, there is a compiler error as you are trying to assign an int to a byte.