1、
byte b1=3;
byte b2=7;
byte b;
编译时出现错误,因为b1和b2都是byte变量,两个相加仍是变量,可能会超出byte范围。编译器并不会检查它们的值。下面这样就可以。其实在第一次b1=3的时候,因为3是整型,底层机制会检查3是否在b1的范围内,在范围内的话就赋值成功,所以b1=3这是可以的。
2、
int x1 = 3;
int x2 = 7;
int x;
x = x1 + x2;
这样是可以的。虽然x1、x2是变量,但是整型默认是int。如果超出int32位,将会截掉前面高位,只剩后面32位。
3、关于复合赋值运算符
int a = 3;
//a += 4;这是没有问题的。
a = a + 4;//这也是没有问题的。
-------------------------------------------------------
short b = 3;
//b += 4;同样这也是没有问题的。
b = b + 4; //这样会编译错误。
同样,int是默认类型,int型的a+=4在底层等价于a = a + 4;
但是对于short,执行b=3的时候由于3默认是int,所以会首先检查3是否在short范围,在的话赋值成功。负责赋值失败,提示可能会损失精度。
执行b+4的时候,b+4 是一个不确定的值,赋给short类型的b可能会超出范围,所以失败。
但是在b+=4的时候,这是一次运算,类似于b=3,也是一次运算,底层会将右值强制转换成成左值类型。b+=4等价于(short)(b+4);
4、关于自增自减
a = 3;
①b = a++;
②b = ++a;
共同性:由于++优先级高于赋值=,所以无论是①还是②,都会先计算右边的值。
特殊性:对于①,a会首先在内存的临时区域开辟一个空间保留a现在的值3,然后在运算区做自增运算,现在a的值等于4了。ok,到现在为止已经计算完了它们的共同性,即右边的值。下一步再把a在临时区域的值3赋值给b,所以b=3。对于②,你懂得~
写得不咋地,自己看得懂就行。加油。