int类型直接赋值给byte类型

今天在复习Java基础数据类型转换时,发现一个有趣的地方:

byte test = 127 , test1 = 10 ,test2 = 20 ;

居然可以直接将int类型的127,10,20赋值给byte类型的test,test1,test2;

先了解一下byte和int类型的取值范围:

byte类型,Java为其分配了一个字节内存,占8位,所有取值范围是:-2^7 ~ 2^7-1 ; 也就是 -128 到 127 ;

int类型,Java为其分配了四个字节内存,占32位,所有取值范围是:-2^31 ~ 2^31-1 ; 也就是 -2147483648 到 2147483647 ;

那么为什么可以直接赋值呢?

原来是因为系统有一个自动转换功能(也就是进行了底层转换,效果和 byte test = (byte) 127 ; 是一样的),只要赋予byte的值不超过byte的取值范围,系统都会自动帮你转换;

不过当赋予的值超过了byte类型的取值范围,那就要手动进行数据类型转换了,不然系统程序就报错了;

如: byte test3 = 128 ;    //报错:Type mismatch: cannot convert from int to byte 

改为:byte test3 = (byte) 128 ; 就可以了

其中char、short类型也是一样的,当赋予int类型的值不超过这些类型的取值范围,那系统就会自动进行数据类型转换了;


另外需要注意的地方,如下代码所示:

byte test = 20 , test1 = 30 ;
byte test4 = test + test1 ;   //错误:Type mismatch: cannot convert from int to byte

为什么两个byte相加就错误呢?

原来是因为:系统防止两个数进行相加后的值有可能会溢出的危险,所以进行了数据类型自动转换。

例如以上改为:

byte test = 127 , test1 = 1 ;
byte test4 = test + test1 ;   //那么test和test1在相加时就超出了bute类型的取值范围了

所以系统为了防止两个数进行相加后的值超过了原有的类型的取值范围,所以就进行了自动数据类型转换,因此出现了以上的错误问题;

也就是 byte test4 = test + test1 ;   相当于 byte test4 = (int) test + (int) test1;  所以就报错了 。

解决:

将 byte test4 = test + test1 ;  改为 byte test4 =  (byte)( test + test1 ) ; 就可以了;

发布了25 篇原创文章 · 获赞 7 · 访问量 2777

猜你喜欢

转载自blog.csdn.net/LagerSwan/article/details/104061692