b. byte b = 1; b = b + 1;
错误,因为b为byte类型的变量,其值可能会在byte类型的范围内变化,虚拟机不能进行判断再加上1后是否会溢出。
c. byte b = 1; b = b += 1;
正确,因为虚拟机会先运行b+=1的结果得到b的值,然后再将得到的b的值再次赋值给b,
注:b+=1能正常运算,因为会将b+1的结果自动强转为byte类型后赋值给b。
但是假如运行byte b=127;b = b += 1;则得到的运行结果不是我们希望的128,而是-128.
d. byte b = 1; b = ++b;
正确,原因同c。先计算++b的值强转为byte类型后得到b的值,
然后再将得到的b的值再次赋值给b。但是假如运行byte b=127;b = b += 1;则得到的运行结果不是我们希望的128,而是-128.