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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© caiyaoren 中级黑马   /  2014-6-16 12:13  /  2090 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

转换分为自动转换和强制转换。什么时候要用强制类型转换?强制类型转换有什么要求或者是需要注意的地方

10 个回复

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

谢谢  有些明白了  
回复 使用道具 举报
楼上已经阐述了多态中的强转问题
我补充下基本数据类型的强制转换跟自动转换
基本数据类型下:如果小的往大的转会自动转换 比如 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类型的值
回复 使用道具 举报
自动转换时系统所允许的,它的一个过程不会丢失精度,如:把一个byte类型的数装换成int类型的,都是可以的,但是如果把int占用内存大的转换成byte占用内存小的类型,就会出现溢出而丢失精度
回复 使用道具 举报
马到成功2014 发表于 2014-6-16 19:11
数据类型转换 ,强转精度变小
父类子类强转,当子类有父类没有的方法,而要调用子类此方法时,你new一个对 ...

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

哈 是我表述不对啊  我意思就是多态父类做形参调用子类特有的方法就要强转
回复 使用道具 举报
short s+=2?这个呢?
回复 使用道具 举报
caiyaoren 发表于 2014-6-18 21:08
short s+=2?这个呢?

这个+=是在隐式进行了强制类型转换,编译不会报错
如果short   s=s+2就要明确表明要进行强制类型转换,如:short  s=(short)s+2否则,就报错了
回复 使用道具 举报
郝九凤 发表于 2014-6-19 18:28
这个+=是在隐式进行了强制类型转换,编译不会报错
如果short   s=s+2就要明确表明要进行强制类型转换,如 ...

恩   谢谢你
回复 使用道具 举报
居于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类型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马