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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



一道关于类型提升的问题,自己编的小程序。

为什么long型不能提升为double型。望指点

评分

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

查看全部评分

9 个回复

倒序浏览
本帖最后由 Jacky_Chen1990 于 2013-5-20 02:20 编辑

我也不懂。 不过提示信息是:Integer不能转换成Double,这就不是提升的问题了。因为我测试了一下,long是可以提升到double型的。

但是Integer是不能够提升到double的,因为Integer是类,而double只是基本类型,无法完成转换。所以就错了。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
没看你的代码,太多了,就看的问题标题。。。
因为类型都不一样,还提升个啥,连转换都做不到,,,,,相当于你能把狗变成猪吗?
回复 使用道具 举报
本帖最后由 王春晓 于 2013-5-20 09:10 编辑

基本数据类型的相互转换
转型规则
JAVA中所有的数字变量都是有符号(正负)的。
JAVA不允许类型的随意转换。只有数字变量可以进行转换,但是不能随意。
带有小数点的数字变量默认都为double型。定义float型必须进行强制类型转换。
所占字节数小的数字型变量赋值给所占字节数比它大的类型时不用强制类型转换,此时是自动转型。
int型变量赋值给char型变量时,JVM会以int型变量值到ASCII码表中查找出所对应的字符,再赋值给char型变量。反之也是。但是遵循第4条规则。
初始化简单数据类型时要注意赋值的范围,超出则会产生编译错误。

而楼主所做的并不是基本数据类型的转换,而是引用数据类型的强制转换,所以是另一种情况了。
对于引用类型来说,什么是强制类型转换呢?简单地说,就是把父类型转换为子类型。因为子类型比父类型的内涵要丰富,无非就是属性更多功能更强,所以要把父类型转换为子类型,需要强制,所以叫强制类型转换。
举个例子来说,比如原来定义了两个类型,FatherClass和SonClass,然后构造了一个SonClass类型的对象,用一个FatherClass类型的变量father引用了,就像这样:
FatherClass father = new SonClass();
那么,需要将这个对象的类型还原的时候,就可以用这个表达式。
SonClass son = (SonClass)father;
其实,father仍然是FatherClass类型,只不过临时把它的能力提升了一下,然后这一切都交给了son这个变量。但是经过这样处理以后,这个对象就真正提升了能力了,在son这个变量的引用之下,从此以后恢复真身,可以自由发挥了。

重点说明一点,强转必须发生在有子父类继承关系的时候,楼主要将Double强转为Integer,而这两个类型并没有继承关系,所以不能强转,提示类型转换异常。

要想操作Double或Integer对象里的基本数值的话,可以调用这些类里的方法,比如Integer里有可以将Integer对象转成基本数据类型的intValue(),longValue(),doubleValue(),byteValue(),floatValue()等方法,可以直接转换成各种基本数据类型,具体请查阅api的详细说明

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
学习飘过~
回复 使用道具 举报
王春晓 发表于 2013-5-20 09:02
基本数据类型的相互转换
转型规则
JAVA中所有的数字变量都是有符号(正负)的。

学习了。是不是应该先转成基本数据类型,再进行强制转换,然后进行装箱?
回复 使用道具 举报
基本数据包装类不能转是吗?
回复 使用道具 举报
史政法 发表于 2013-5-20 05:53
没看你的代码,太多了,就看的问题标题。。。
因为类型都不一样,还提升个啥,连转换都做不到,,,,,相 ...

你这头像,很像一个人,是不是你自己的头像呀~~~嘎嘎
回复 使用道具 举报
提升之后又可以干啥呢?搞不清楚楼主的意图是什么哦
回复 使用道具 举报
HM张博文 发表于 2013-5-25 22:42
提升之后又可以干啥呢?搞不清楚楼主的意图是什么哦

提升以后进行比较啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马