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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 第一印象 中级黑马   /  2013-9-5 11:10  /  1342 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 第一印象 于 2013-9-5 21:52 编辑

JDK1.5的新特性中,支持将基本数据自动装箱成引用类型,比如:
Integer a = 12;
Byte b = 12;
Short c = 12;
Character d = 12;
但是浮点类型为什么只支持自动类型提升而不支持装箱呢?比如
float a = 2;
double b = 2;
这么些没问题,但是下面的写法就有问题了:
Float a = 2;
Double b = 2;


评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。

类似这样的代码是不能工作的,尽管int型的数据完全可以用一个Long对象来表示:
例:不能同时进行自动向上转型和Autoboxing
    int i = 27828;
    System.out.println((Long) i);/* 编译时出错 */
     
这是因为这段代码实际上相当于:
例:Autoboxing操作会在自动向上转型之前发生
    int i = 27828;
    System.out.println((Long) Integer.valueOf(i));/* 编译时出错 */
     
而Integer并不是Long的子类,所以这个转化无法进行。如果一定要进行这种操作,需要手工追加一次转型:
例:需要先强制向上转型,再作Boxing
    int i = 27828;
    System.out.println((Long)(long) i);

嘿嘿   查的时候是这样讲解的。楼主的问题正好可以这样的解释。
Float a = 2;  此时2  默认为int型。如果执行词句的话,就相当于将int型先提升为float型,然后在去自动装箱。而实际上自动装箱是发生在提升之前的。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

回复 使用道具 举报
辛春鹏 发表于 2013-9-5 14:32
Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。
  ...

了解了,谢谢,测试通过,跟你所讲完全一致,再问一下,你这个东西哪里了解到的?
回复 使用道具 举报
第一印象 发表于 2013-9-5 15:48
了解了,谢谢,测试通过,跟你所讲完全一致,再问一下,你这个东西哪里了解到的?
...

请及时将“未解决”修改为“已解决”!
回复 使用道具 举报
第一印象 发表于 2013-9-5 15:48
了解了,谢谢,测试通过,跟你所讲完全一致,再问一下,你这个东西哪里了解到的?
...

谷歌一下啊。。。。O(∩_∩)O~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马