在整型变量的字面量赋值中,有一些细节在此记录下。
1、byte
byte b1 = 2;
byte b2 = 128;
byte b3 = (2147483648);
上面三个赋值语句,第一个不会有编译错误,第二个赋值128已经超过了byte的最大值,所以需要强制类型转换,第三种赋值超过了int的最大值,强制转换也会编译错误。
2、short
short s1 = 2;
short s2 = 32768;
short s3 = (2147483648);
上面三个赋值语句,第一个不会有编译错误,第二个赋值32768已经超过了short的最大值,所以需要强制类型转换,第三种赋值超过了int的最大值,强制转换也会编译错误。
3、int
int i1 = 2;
int i2 = 2147483647;
int i3 = 2147483648;
上面三个赋值语句,第一个和第二个不会有编译错误,因为没有超过int的最大值,第三种赋值超过了int的最大值,强制转换也会编译错误。
4、long
long l1 = 2;
long l2 = 2147483648L;
long l3 = 9223372036854775807L;
long l4 = 9223372036854775808L;
long l5 = 2147483648;
上面的赋值语句中,第一个、第二个和第三个都没有超过long的最大值,所以不会编译错误。第四个已经超过了long的最大值,所以会编译错误。最后一个赋值没有L后缀,默认int,但是已经超过int的最大值,强转也会编译错误。
总结:
对于byte和short,赋值如果没有超过彼此的取值范围则直接赋值,如果超过了但是没有超过int的最大值,则需要强制类型转换。如果超过了int的最大值,强转也会报错。
对于int类型,只要不超过in他的最大值即可,超过了编译错误。
对于long,如果是加L后缀,赋值不能超过long的最大值,否则编译错误。如果没有加L后缀,则不能超过int的最大值,否则编译错误。