A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹强 中级黑马   /  2014-4-6 18:14  /  1408 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

可能学的时候没怎么注意,什么时候需要强转啊,举些列子呗

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

5 个回复

倒序浏览
当类型不同时,而你又想要把这个类型赋值给另一种类型。这时就要使用强转

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
大类型不能自动转小类型,所以就强转,就像大盒子包含小盒子,小盒子能放大盒子里,而大盒子不能放小盒子里

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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的空间当中,此时数据并没有发生丢失。
那从上面的例子中可以看出,进行强制类型转换的时候,可能会导致数据的丢失。这一点一定要注意。

评分

参与人数 1技术分 +2 收起 理由
朱神必 + 2

查看全部评分

回复 使用道具 举报
变量在内存中的存放 与 各自的精度有,当高精度转向低精度转换的时候 范围从大到小会损失一丁的精度 所以会报错要强转  从低精度到高精度 会扩大范围会隐式转换
回复 使用道具 举报
强转就是  例如 当有两个变量类型不同 但是 比如一个int一个是byte,固然int在内存中是4个8进制而byte在内存中就是一个八进制所以要当你要把一个高(即int)的转成低的(即byte)的时候就要把低的(byte)强制性的转成高的(int)所以就得强制转型。内存中类型 对应的二进制个数:byte   一个8进制    short   两个八进制  int   四个八进制
long  八个八进制    char  两个二进制   flot 四个八进制  double  八个八进制     

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马