黑马程序员技术交流社区

标题: 什么时候需要强转啊 [打印本页]

作者: 曹强    时间: 2014-4-6 18:14
标题: 什么时候需要强转啊
可能学的时候没怎么注意,什么时候需要强转啊,举些列子呗
作者: 向阳泪无痕    时间: 2014-4-6 18:43
当类型不同时,而你又想要把这个类型赋值给另一种类型。这时就要使用强转
作者: 黄泉    时间: 2014-4-6 18:43
大类型不能自动转小类型,所以就强转,就像大盒子包含小盒子,小盒子能放大盒子里,而大盒子不能放小盒子里
作者: alucard    时间: 2014-4-6 21:02
本帖最后由 alucard 于 2014-4-6 21:04 编辑

强制类型转换:
将高级别类型赋值给低级别类型时,必须进行强制类型转换。
举例说明:
  1. int i = 786;
  2. byte b = i;//错误
  3. byte b = (byte) i;//强制类型转换
  4. short s = i; //错误
  5. short s = (short)i; //强制类型转换
复制代码
将整型变量i的值786直接赋给byte类型的变量b时,将出现编译错误,此时必须进行强制类型转换。那么怎么进行强制类型转换呢?强制类型转换的运算符是小括号,小括号内注明要转换的类型。比如第三行代码,byteb = (byte) i;完成强制类型转换。它的转换过程如图所示:
整型变量i在内存中占四个字节空间,低位的两个字节中存放786对应的二进制数,高位的两个字节全部为0。当赋值给byte类型变量b时,将直接取最后一个字节的内容复制到b的内存空间中,完成强制类型转换,也就是说将它的00010010直接放在了b的内存空间,b的值就变为了18。可能你已经发现了,此时产生了数据丢失。它前面的00000011数据不见了。我们再看第五行代码,当赋值给short类型变量s时,将直接取最后两个字节的内容复制到s的内存空间中,完成数据类型转换。此时并没有丢失数据。

看这个图,它直接将低的两个字节内容放到了s的空间当中,此时数据并没有发生丢失。
那从上面的例子中可以看出,进行强制类型转换的时候,可能会导致数据的丢失。这一点一定要注意。


作者: ^o(孤8o|狼i¤F    时间: 2014-4-6 22:07
变量在内存中的存放 与 各自的精度有,当高精度转向低精度转换的时候 范围从大到小会损失一丁的精度 所以会报错要强转  从低精度到高精度 会扩大范围会隐式转换
作者: demown    时间: 2014-4-7 10:23
强转就是  例如 当有两个变量类型不同 但是 比如一个int一个是byte,固然int在内存中是4个8进制而byte在内存中就是一个八进制所以要当你要把一个高(即int)的转成低的(即byte)的时候就要把低的(byte)强制性的转成高的(int)所以就得强制转型。内存中类型 对应的二进制个数:byte   一个8进制    short   两个八进制  int   四个八进制
long  八个八进制    char  两个二进制   flot 四个八进制  double  八个八进制     




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2