Why b=b+1 when b is a byte won't compile but b+=1 compiles
This question already has an answer here:
This is an interesting question. See JLS 15.26.2. Compound Assignment Operators:
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)) , where T is the type of E1 , except that E1 is evaluated only once.
So when you are writing b+=1; , you are actually casting the result into a byte , which is the similar expressing as (byte)(b+1) and compiler will know what you are talking about. In contrast, when you use b=b+1 you are adding two different types and therefore you'll get an Incompatible Types Exception .
the Error you get is because of the operations with different data types and that can cause an overflow.
when you do this:
byte b = 127;
b=b+1;
you generate an overflow, so the solution would be casting the result
b=(byte) (b+1);
Because can't convert int to byte
You can try:
b=(byte) (b+1);
链接地址: http://www.djcxy.com/p/12794.html