黑马程序员技术交流社区

标题: 什么时候要用强制类型转换 [打印本页]

作者: caiyaoren    时间: 2014-6-16 12:13
标题: 什么时候要用强制类型转换
转换分为自动转换和强制转换。什么时候要用强制类型转换?强制类型转换有什么要求或者是需要注意的地方

作者: 马到成功2014    时间: 2014-6-16 19:11
数据类型转换 ,强转精度变小
父类子类强转,当子类有父类没有的方法,而要调用子类此方法时,你new一个对象就要强转,
还有很多方法返回值类型是object,object是所有的父类,你用此方法时就要强转到你当前类。
不过eclipse都有提醒报错的。这是我暂时知道点的  希望有帮助。

作者: caiyaoren    时间: 2014-6-16 19:49
马到成功2014 发表于 2014-6-16 19:11
数据类型转换 ,强转精度变小
父类子类强转,当子类有父类没有的方法,而要调用子类此方法时,你new一个对 ...

谢谢  有些明白了  
作者: 空心祭    时间: 2014-6-18 00:34
楼上已经阐述了多态中的强转问题
我补充下基本数据类型的强制转换跟自动转换
基本数据类型下:如果小的往大的转会自动转换 比如 byte short 会自动向int转换
但是如果出现了大的向小的转,比如
byte b = 3;
b = b + 4;
这时候就出现一个问题 b是byte类型的  而整数默认是int类型 也就是4在这里默认是int类型的
那么b + 4这时候会向上提升 自动转换为int类型的值  
但是这时候你想要把一个int类型的值赋给 byte 类型的b  那么就必须进行强制转换
b = (byte)(b+4);这样就将和强制转换为一个byte类型的值
作者: 郝九凤    时间: 2014-6-18 09:00
自动转换时系统所允许的,它的一个过程不会丢失精度,如:把一个byte类型的数装换成int类型的,都是可以的,但是如果把int占用内存大的转换成byte占用内存小的类型,就会出现溢出而丢失精度
作者: 郝九凤    时间: 2014-6-18 09:08
马到成功2014 发表于 2014-6-16 19:11
数据类型转换 ,强转精度变小
父类子类强转,当子类有父类没有的方法,而要调用子类此方法时,你new一个对 ...

不好意思,我感觉你说的有点不对,当子类有父类没有的方法时,直接建立父类引用指向子类对象就可以了,这不叫强转,而当子父对方法有不同的实现时,而子类不想用自己的实现,就想用父类的实现,这时,就要把子类的实例强转成父类类型
作者: 马到成功2014    时间: 2014-6-18 19:20
郝九凤 发表于 2014-6-18 09:08
不好意思,我感觉你说的有点不对,当子类有父类没有的方法时,直接建立父类引用指向子类对象就可以了,这 ...

哈 是我表述不对啊  我意思就是多态父类做形参调用子类特有的方法就要强转
作者: caiyaoren    时间: 2014-6-18 21:08
short s+=2?这个呢?
作者: 郝九凤    时间: 2014-6-19 18:28
caiyaoren 发表于 2014-6-18 21:08
short s+=2?这个呢?

这个+=是在隐式进行了强制类型转换,编译不会报错
如果short   s=s+2就要明确表明要进行强制类型转换,如:short  s=(short)s+2否则,就报错了
作者: caiyaoren    时间: 2014-6-19 20:37
郝九凤 发表于 2014-6-19 18:28
这个+=是在隐式进行了强制类型转换,编译不会报错
如果short   s=s+2就要明确表明要进行强制类型转换,如 ...

恩   谢谢你
作者: ⋛⋌⋚JEEP    时间: 2014-6-25 13:33
居于lz的问题,楼上的都回答的很好。我想lz更清晰用占用内存大小去理解会比较容易。
计算机内部是由无数个二进制数构成的,一个字节(byte)=8位(bit)二进制数,
所以,1byte=8bit,1short=2*8bit 1int=4*8bit,1long=8*8bit ...
如代码:short s=s+2,2默认为int类型,short 是2个8位,int 是4个8位,2个8位的short自动提升到4个8位(内存空间必须大小一致)就变成int类型,当左右两边类型不一致时,编译出错,要得到左边的short类型,就必须降低精度,强制提升后int类型转换成short类型。





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