Fork me on GitHub

大类型向小类型转换

-----------siwuxie095

   

   

   

   

大类型向小类型转换:

强转类型转换-简称 强转,或 显式类型转换

   

   

   

Java在进行整数运算时默认是按照int类型处理的,因此 b+10 的结果

是int类型的,虽然没有超过byte类型最大值,但仍要求 b+10 的结果

赋值给字节类型变量时要做强制类型转换

   

   

强转 的写法:用一对小括号,括号里是要转换类型的关键字,

后面是转换的表达式

   

   

   

Java对于像 5+10 这样明显的可以得出结果的字面量的运算,在编译时

直接将 5 和 10 相加,如果结果没有超过字节类型的最大值,就没有错误

即结果 15 在编译期间就保存在变量 b 中,无需类型转换

   

   

   

   

强制类型转换时,要注意边界数风险问题

   

具体含义:

大类型向小类型转换时,有可能数据位成为小数的高位的符号位,

也有可能超过小类型存储的最大值

   

   

如:

大类型转小类型时,源数据的数据位变为目标数据的符号位

   

   

字节类型的最大值是 127,那么 129 存储在 b 中,肯定就不是 129 了

   

   

将int类型(32位)的 129 转换为二进制,即:10000001

(共 8 位,高位 24 位的 000… 省略

   

而 byte类型只有 8 位,则 10000001,就变成了负数

   

所有位取反:01111110,再加101111111,即 127

   

所以 b 的最终结果是 -127

   

   

   

   

   

再如:

大类型的数据超过了小类型的位数

   

   

定义int类型变量 i 赋值 257,如果将 i 的值强制转换为byte类型,保存在b 中

   

   

将int类型(32位)的 257 转换为二进制,即:100000001

(共 9 位,高位 23 位的 000… 省略

   

而byte类型只能存 8 位,那么最高位的 1 将丢失掉,

剩下:00000001,即 1

   

即int类型 257 转换为byte类型后是 1

   

   

   

   

【made by siwuxie095】

posted on 2017-03-11 17:19  siwuxie095  阅读(498)  评论(0编辑  收藏  举报

导航